私は C# プログラマーで、リバース エンジニアリング作業を行っていますが、問題が発生しています。
私がやろうとしているのは、ライブラリ関数をリモート プロセスにフックし、データをログに記録することです。
不明なライブラリ (libcef.dll) のカスタム タイプおよび関数定義でAPI Monitorを使用しましたが、定義されている関数をインターセプトできます。
これらの関数をフックする独自のアプリケーションを作成したいと考えています。マネージ EasyHook ライブラリを使用して C# で多くのマーシャリングを行うよりも簡単に思えるので、C++ で EasyHook を使用することにしました。
EasyHook では、フックする関数を正しい関数呼び出し規則、識別子、およびパラメーターで定義する必要があります。
ただし、私が持っている C++ の知識は限られているため、API Monitor 用に (XML ファイルで) 持っている型定義を C++ コードに変換することができます。これを、フックする関数を定義するときに使用できます (これは cef_parse_url です)。
問題は、以下の API モニター型定義 (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++ の中級者であれば、簡単に私を助けることができると思います。
前もって感謝します!