【问题标题】:API Monitor Type Definitions (XML) to C++ CodeAPI 监视器类型定义 (XML) 到 C++ 代码
【发布时间】:2018-09-08 23:26:01
【问题描述】:

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

我正在尝试做的是在远程进程中挂钩一个库函数并记录一些数据。

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

我想编写自己的应用程序来挂钩这些功能。我选择在 C++ 中使用 EasyHook,因为它似乎比使用托管 EasyHook 库在 C# 中编组这么多简单。

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

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

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

<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++ 中级的人来说,能够轻松地帮助我。

提前致谢!

【问题讨论】:

    标签: c++ xml easyhook apimonitor


    【解决方案1】:

    好吧,没关系。

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

    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);
    

    【讨论】:

      猜你喜欢
      • 2013-01-25
      • 1970-01-01
      • 2021-11-25
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 2015-07-23
      • 2015-09-15
      相关资源
      最近更新 更多