首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++代码的API监视器类型定义(XML)

C++代码的API监视器类型定义(XML)
EN

Stack Overflow用户
提问于 2018-09-09 07:26:01
回答 1查看 166关注 0票数 0

我是一名C#程序员,正在做一些反向工程工作,我遇到了一些麻烦。

我要做的是在远程进程中挂接一个库函数,并记录一些数据。

我将API Monitor与未知库(libcef.dll)的一些自定义类型和函数定义一起使用,并且我能够截获已定义的函数。

我想编写自己的应用程序来挂钩这些函数。我选择在C++中使用EasyHook,因为它看起来比使用托管EasyHook库在C#中编组这么多内容更简单。

EasyHook要求我定义要与正确的函数调用约定、标识符和参数挂钩的函数。

但是,由于我对C++的了解有限,我能够将API Monitor的类型定义(在XML文件中)转换为C++代码,然后在定义要挂钩的函数(即cef_parse_url)时使用这些代码。

所以问题是:如何将下面的API Monitor类型定义(XML)转换为C++代码?

代码语言:javascript
复制
<ApiMonitor>

<Include Filename="Headers\common.h.xml" />

<Module Name="libcef.dll" CallingConvention="CDECL" OnlineHelp="Google">

    <Variable Name="cef_string_t" Type="Struct">
        <Field Type="wchar_t*"    Name="str" />
        <Field Type="size_t"   Name="length" />
        <Field Type="void*"    Name="dtor" />
    </Variable>
    <Variable Name="const cef_string_t" Type="Alias" Base="cef_string_t" />
    <Variable Name="cef_string_t*" Type="Pointer" Base="cef_string_t" />
    <Variable Name="const cef_string_t*" Type="Pointer" Base="const cef_string_t" />

    <Variable Name="cef_urlparts_t" Type="Struct">
        <Field Type="cef_string_t"  Name="spec" />
        <Field Type="cef_string_t"  Name="scheme" />
        <Field Type="cef_string_t"  Name="username" />
        <Field Type="cef_string_t"  Name="password" />
        <Field Type="cef_string_t"  Name="host" />
        <Field Type="cef_string_t"  Name="port" />
        <Field Type="cef_string_t"  Name="origin" />
        <Field Type="cef_string_t"  Name="path" />
        <Field Type="cef_string_t"  Name="query" />
    </Variable>
    <Variable Name="const cef_urlparts_t" Type="Alias" Base="cef_urlparts_t" />
    <Variable Name="cef_urlparts_t*" Type="Pointer" Base="cef_urlparts_t" />
    <Variable Name="const cef_urlparts_t*" Type="Pointer" Base="const cef_urlparts_t" />

    <!-- Parse funcs -->
  
    <Api Name="cef_parse_url">
        <Param Type="const cef_string_t*"   Name="url" />
        <Param Type="cef_urlparts_t*"      Name="parts" />
        <Return Type="int" />
    </Api>

</Module>

如果有人能帮助我,那将是我的整个世界。我相信对于C++中级水平的人来说,能够很容易地帮助到我。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-09 14:09:20

好吧,算了吧。

答案其实很简单。我发现,让它看起来如此复杂的额外定义并不重要。

代码语言:javascript
复制
typedef struct _cef_string_t {
    wchar_t* str;
    size_t length;
    void(*dtor)(wchar_t* str);
} cef_string_t;

typedef struct _cef_urlparts_t {
    cef_string_t spec;
    cef_string_t scheme;
    cef_string_t username;
    cef_string_t password;
    cef_string_t host;
    cef_string_t port;
    cef_string_t path;
    cef_string_t query;
} cef_urlparts_t;

int _cdecl cef_parse_url(const cef_string_t* url, _cef_urlparts_t* parts);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52240159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档