3
虽然逆向工程我绕过一个非常奇怪的程序,它使用调用约定,在eax中传递一个参数(非常奇怪的编译器??)。现在我要调用该函数,我不知道如何申报呢,IDA将其定义为C++自定义调用约定
bool __usercall foo<ax>(int param1<eax>, int param2);
其中的param1在EAX寄存器传递。我想是这样
bool MyFoo(int param1, int param2)
{
__asm mov eax, param1;
return reinterpret_cast<bool(__stdcall *)(int)>(g_FooAddress)(param2);
}
然而,不幸的是我的编译器利用了EAX寄存器堆栈上推param2的时候,有没有什么办法,我怎么能做出这种干净而不需要编写与内联汇编整个通话? (如果重要,我正在使用Visual Studio)
我知道,但MSVC快速调用使用ECX + EDX而不是EAX,因此它不是我所需要的:-( – Listing
谢谢我按照您的建议退回到内联汇编程序,我首先想到您几乎总是可以避免内联汇编程序,这是我遇到的第一种情况,你不能。 – Listing