基础知识
本页面介绍了 x64dbg 插件开发的基本原理。有关示例插件和模板,请参阅插件页面。
导出
插件至少有一个导出。此导出必须称为 pluginit
。有关详细信息,请参阅 PLUG_INITSTRUCT
和插件标头。其他有效的导出是:
在即将卸载插件时调用 plugstop
。在此处删除所有已注册的命令和回调。还要清理插件数据。
plugsetup
在插件初始化成功时调用,在这里您可以注册菜单和其他与 GUI 相关的内容。
CB*
您可以创建 CDECL
导出,其中包含回调的名称,而不是调用_plugin_registercallback
。例如,当您创建名为 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);