有点...我有一个 DLL,它从反汇编然后反编译的代码中导出唯一的单个函数 CreateInterface :
int __cdecl CreateInterface(const char *a1, int a2)
{
//many crazy things
}
这里它的返回类型为 int,但实际上它是指向某个结构的指针。从主 exe 加载这个库,然后以这种方式使用:
int (__stdcall *__cdecl Sys_GetFactory(int (__stdcall *hModule)()))()
{
int (__stdcall *result)(); // eax@1
result = hModule;
if ( hModule )
result = GetProcAddress(hModule, "CreateInterface");
return result;
}
void some_funct()
{
FARPROC net_interface = Sys_GetFactory(pModule);
int s_pClientNet = ((int (__cdecl *)(_DWORD, _DWORD))net_interface)("INetClient_003", 0);
}
并在初始化后以这种方式使用:
int result = (*(int (__stdcall **)(int, int, int, int))(*(_DWORD *)s_pClientNet + 60))(
login,
password,
mw_account_struct,
mw_account_struct_size);
所以..回到结构。无论如何要恢复它,而不是通过如此疯狂的方式调用所需的函数?我的意思是 (s_pClientNet + 60)
PS 我肯定没有 dll 源、def 文件等,甚至不知道目标类/结构中可以包含哪些函数……我唯一知道的是一些调用像 s_pClientNet + 60 这样的功能