基础知识
本页涵盖 x64dbg 插件开发的基本原则。有关示例插件和模板,请参见插件页面。
导出函数
一个插件至少有一个导出函数。此导出函数必须命名为 pluginit。有关 PLUG_INITSTRUCT 和插件头文件的更多信息,请参见相关文档。其他有效的导出函数包括:
plugstop 在插件即将卸载时调用。在此移除所有已注册的命令和回调。同时清理插件数据。
plugsetup 在插件初始化成功后调用,可在此注册菜单和其他与 GUI 相关的内容。
CB* 与调用 _plugin_registercallback 不同,你可以创建一个名为回调事件名称的 CDECL 导出函数。例如,当你创建一个名为 CBMENUENTRY 的导出函数时,它将被注册为你对事件 CB_MENUENTRY 的回调。注意,导出函数名中不应使用下划线。
CBALLEVENTS 名为 CBALLEVENTS 的导出函数将接收注册到它的所有事件。此操作在其他可选导出函数名注册之前完成。
定义
初始化导出函数。
extern "C" __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct);
extern "C" __declspec(dllexport) bool plugstop();
extern "C" __declspec(dllexport) void plugsetup(PLUG_SETUPSTRUCT* setupStruct);
回调导出函数。确保只导出你实际使用的回调!
extern "C" __declspec(dllexport) void CBINITDEBUG(CBTYPE cbType, PLUG_CB_INITDEBUG* info);
extern "C" __declspec(dllexport) void CBSTOPDEBUG(CBTYPE cbType, PLUG_CB_STOPDEBUG* info);
extern "C" __declspec(dllexport) void CBEXCEPTION(CBTYPE cbType, PLUG_CB_EXCEPTION* info);
extern "C" __declspec(dllexport) void CBDEBUGEVENT(CBTYPE cbType, PLUG_CB_DEBUGEVENT* info);
extern "C" __declspec(dllexport) void CBMENUENTRY(CBTYPE cbType, PLUG_CB_MENUENTRY* info);