#pragma once #include #include #include #include #include #include #include #include #include #include #include "ui_qvminspector.h" #include #include #define ABS_TO_IMG( addr, mod_base, img_base ) ( addr - mod_base ) + img_base Q_DECLARE_METATYPE( vm::instrs::virt_instr_t ) struct rtn_data_t { std::uint32_t rtn_rva; std::vector< vm::instrs::code_block_t > rtn_blks; }; class qvm_inspector : public QMainWindow { friend class qvm_virtual_instructions; friend class qvm_handlers; friend class qvm_virtual_routines; Q_OBJECT public: qvm_inspector( QWidget *parent = Q_NULLPTR ); private slots: void on_open(); void on_close(); private: void dbg_print( QString DbgOutput ); void dbg_msg( QString DbgOutput ); void update_ui(); bool serialize_vmp2( std::vector< rtn_data_t > &virt_rtns ); void update_virtual_instructions( std::uintptr_t rtn_addr, std::uintptr_t blk_addr = 0ull, QTreeWidgetItem *parent = nullptr ); bool init_data(); Ui::QVMProfilerClass ui; std::uint64_t img_base, module_base, img_size; vm::ctx_t *g_vm_ctx; vmp2::v4::file_header *file_header; std::vector< rtn_data_t > virt_rtns; std::vector< std::uintptr_t > code_block_addrs; };