您当前的位置: 首页 > 

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

插件开发 发布时间:2022-05-11 08:40:37 ,浏览量:1

文章目录
    • 1.pluginit 导出函数
    • 2.作者答疑

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.作者答疑

  如有疑问,敬请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0380s