Я программист на С#, который занимается обратным проектированием, и у меня возникли проблемы.
Что я пытаюсь сделать, так это подключить библиотечную функцию в удаленном процессе и записать некоторые данные.
Я использовал API Monitor с некоторыми пользовательскими определениями типов и функций для неизвестной библиотеки (libcef.dll) и я могу перехватывать определенные функции.
Я хочу написать собственное приложение, которое перехватывает эти функции. Я решил использовать 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++ на среднем уровне, сможет легко мне помочь.
Заранее спасибо!