我试图通过注入 DLL 来调用由 Hex-Rays 生成的函数,但到目前为止只设法使进程崩溃。
这是 Hex-Rays 生成的代码
int __usercall sub_54C3A0@<eax>(int a1@<esi>, void *a2@<ecx>)
{
char *v2; // eax@1
char *v3; // edx@1
char v4; // cl@2
int result; // eax@4
char v6[84]; // [sp+0h] [bp-58h]@1
sub_432BA0(a2);
dword_81D7CC = 1;
sub_432B40("xxx_");
v2 = (char *)sub_431620(55);
v3 = (char *)(v6 - v2);
do
{
v4 = *v2;
v2[(_DWORD)v3] = *v2;
++v2;
}
while ( v4 );
sub_4330E0(*(_DWORD *)v6);
sub_437270();
dword_81D7CC = 0;
result = 0;
if ( v6[0] )
{
dword_81DAE0 = 0;
if ( sub_54C480(100, a1) || dword_81DAE0 || sub_54C480(75, a1) || dword_81DAE0 || sub_54C480(50, a1) )
result = 1;
}
return result;
}
这是我的代码
static DWORD hook_address = 0x54C3A0;
__declspec(naked) int hook()
{
__asm {
push esi // a1
push ecx // a2
call hook_address
retn 4
}
}
正确的包装器是什么样子的,为什么?