确定函数参数的起始地址

时间:2019-01-19 20:11:10

标签: c assembly x86 nasm

我有一个“ c”程序,该程序为外部x86函数提供以下参数:

extern "C" int fun(unsigned char *par1, unsigned char *par2, unsigned int par3);

par1的长度已定义。

如何确定参数开始的地址?

我知道par1从[ebp+8]开始,例如par2从[ebp+16]

开始

我不知道如何确定par3的起始位置?

1 个答案:

答案 0 :(得分:3)

根据x86 ABI,调用者以相反的顺序推送参数,然后调用autofun指令将call压入堆栈,然后跳转到eip。然后,设置堆栈框架,使fun位于堆栈顶部,因此arg1必须比堆栈框架高8个字节:

ebp