Files
2023-04-12 22:04:03 +02:00

40 lines
1.1 KiB
C++

#ifndef WILD_BASE_HPP_
#define WILD_BASE_HPP_
#include "wild_handler_parser.hpp"
#include "wild_handler.hpp"
class wild_base : public wild_handler_parser
{
virtual bool parse_initial_handler(instruction_container& instructions) = 0;
virtual bool parse_virtual_handler(instruction_container& instructions, uint32_t index, uint32_t compares) = 0;
virtual bool fetch_virtual_handler(std::size_t index, wild_handler** handler) = 0;
virtual bool update_argument_data() { return false; }
public:
wild_base(wild_context& context);
public:
bool devirtualize(uint32_t vm_function, uint32_t vm_entry, instruction_container& vm_instructions);
private:
bool parse_virtual_machine(uint32_t vm_entrance);
bool trace_function(instruction_container& instructions);
bool process_virtual_pointer(instruction_container& instructions, wild_opcode_label& label);
void process_virtual_function(instruction_container& instructions);
bool parse_initial_handlers();
bool parse_virtual_handlers();
bool parse_next_handler_offset(instruction_container& instructions);
private:
uint32_t vm_function;
uint32_t vm_entrance;
};
#endif