除了调用者清理堆栈外,我如何调用类似于 __thiscall 的函数?

逆向工程 x86 C++ 调用约定
2021-06-25 00:58:43

我试图用 C++ 中的函数指针调用一个函数,但我找不到任何适合它的约定。它的堆栈参数是(从右到左):

func(float x, float y, int unk);

...但 ecx 需要指向可用于输出/存储的缓冲区。那将是 __thiscall,但调用者会清理堆栈(将 12 添加到 esp)。这就是我现在所拥有的:

((void(__thiscall*)(char*,float,float,int))(0x1234567))(a, b, c);

但它会导致应用程序崩溃,因为堆栈不均匀。

我怎么称呼这个?

1个回答

听起来你有一个可变参数__thiscall函数(类似printf)。那些ecx用于this但剩余的参数被推送到堆栈上,调用者将其清理干净。