【发布时间】:2011-12-03 07:13:53
【问题描述】:
在进行逆向工程时,我遇到了一个非常奇怪的程序,它使用在 eax 中传递一个参数的调用约定(非常奇怪的编译器??)。我现在想调用那个函数,不知道怎么声明,IDA定义为
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);
}
但是,不幸的是,我的编译器在将 param2 压入堆栈时使用了 eax 寄存器,有没有什么办法可以在不使用内联汇编程序编写整个调用的情况下使这个干净? (如果这很重要,我正在使用 Visual Studio)
【问题讨论】:
标签: c++ assembly calling-convention