#pragma once #include #include #include #include #include #include "parser.h" #define NT_HEADER(x) \ reinterpret_cast( \ reinterpret_cast(x)->e_lfanew + x) namespace vm { struct base_data_t { std::uintptr_t module_base; std::uintptr_t image_base; }; struct vinstr_data { std::uint8_t vm_handler; std::uint64_t operand; std::uint8_t imm_size; // size in bits... }; class compiler_t { public: explicit compiler_t( base_data_t base_data, vmp2::exec_type_t exec_type, std::vector* vm_handlers, zydis_routine_t* calc_jmp ); std::pair*> encode(); std::pair* > encrypt(); private: transform::map_t calc_jmp_transforms; zydis_routine_t* calc_jmp; std::vector* vm_handlers; vmp2::exec_type_t exec_type; std::vector vinstrs; std::vector result_buffer; std::uintptr_t image_base, module_base; }; }