我有一个“ c”程序,该程序为外部x86函数提供以下参数:
extern "C" int fun(unsigned char *par1, unsigned char *par2, unsigned int par3);
par1的长度已定义。
如何确定参数开始的地址?
我知道par1从[ebp+8]
开始,例如par2从[ebp+16]
我不知道如何确定par3的起始位置?
答案 0 :(得分:3)
根据x86 ABI,调用者以相反的顺序推送参数,然后调用auto
。 fun
指令将call
压入堆栈,然后跳转到eip
。然后,设置堆栈框架,使fun
位于堆栈顶部,因此arg1必须比堆栈框架高8个字节:
ebp