X64dbg-插件开发-导出函数-导出功能-回调导出的函数和结构

本文介绍了x64dbg插件开发中的关键函数pluginit,详细讲解了其在加载动态链接库后的作用,以及如何通过PLUG_INITSTRUCT结构向x64dbg注册插件。在C++和汇编程序中展示了如何实现和导出pluginit函数,同时提供了相关变量和字符串的设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.pluginit 导出函数

  pluginit是 x64dbg 在加载动态链接库(.dp32或.dp64)后调用的第一个导出函数,如果pluginit不存在,则此时插件加载将失败。pluginit将指向PLUG_INITSTRUCT结构的指针作为函数中的唯一参数传递:initStruct。此结构用于向 x64dbg 注册插件并获取有效的插件句柄,以便在未来的 api 调用中使用。
PLUG_INITSTRUCT结构定义:

typedef struct
{
    //provided by the debugger
    int pluginHandle;
    //provided by the pluginit function
    int sdkVersion;
    int pluginVersion;
    char pluginName[256];
} PLUG_INITSTRUCT;

  因此,我们必须将有效信息放回此结构中,以便 x64dbg 验证和识别我们的插件。一些定义的可用于提供通过该结构的字段所需的信息:pluginVersion(PLUGIN_VERSION-由用户定义)和sdkVersion(PLUG_SDKVERSION-在SDK预定义- SDK的版本x64dbg期望)。该pluginName是包含插件的名称的字符串缓冲区。该pluginHandle字段作为句柄提供给我们,我们可以在未来的 api 调用中保存和重用。当然,我们需要声明一些用于通过PLUG_INITSTRUCT结构将这些信息传回的变量和字符串,并存储返回给我们的信息(pluginHandle in pluginit和plugsetup稍后调用中的其他句柄)。以下是定义它们的方法:

// Plugin SDK required variables
#define plugin_name "x64dbg_plugin" // rename to your plugins name 
#define plugin_version 1

// GLOBAL Plugin SDK variables
int pluginHandle;
HWND hwndDlg;
int hMenu;
int hMenuDisasm;
int hMenuDump;
int hMenuStack;

  现在我们已经设置了我们的变量和字符串,我们已经准备好构建我们的pluginit函数了。下面是pluginitC++(32 位和 64 位)中的几个示例,如下所示:

DLL_EXPORT bool pluginit(PLUG_INITSTRUCT* initStruct)
{
    initStruct->pluginVersion = plugin_version;
    initStruct->sdkVersion = PLUG_SDKVERSION;
    strcpy(initStruct->pluginName, plugin_name);
    pluginHandle = initStruct->pluginHandle;

    // place any additional initialization code here
    
    return true;
}

  在汇编程序(x86 和 x64)中,您还必须将导出的函数添加到 .def 文件中,以便在编译和链接时外部调用者可以看到它们:

LIBRARY MyPlugin
EXPORTS pluginit
        plugstop
        plugsetup

2.作者答疑

  如有疑问,敬请留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值