You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.5 KiB
56 lines
1.5 KiB
#pragma once
|
|
#include <QtWidgets/QFileDialog>
|
|
#include <QtWidgets/QInputDialog.h>
|
|
#include <QtWidgets/QMainWindow>
|
|
#include <QtWidgets/QMessageBox.h>
|
|
#include <qpushbutton.h>
|
|
#include <qtreewidget.h>
|
|
|
|
#include <Windows.h>
|
|
#include <filesystem>
|
|
#include <fstream>
|
|
#include <vmprofiler.hpp>
|
|
|
|
#include "ui_qvminspector.h"
|
|
#include <ia32.hpp>
|
|
#include <vmprofiler.hpp>
|
|
|
|
#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;
|
|
}; |