gpt4 book ai didi

c - 确定函数参数起始地址

转载 作者:行者123 更新时间:2023-12-01 13:16:36 25 4
gpt4 key购买 nike

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

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

定义了par1的长度。

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

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

开始

我不知道如何确定 par3 从哪里开始?

最佳答案

根据 x86 ABI,调用者以相反的顺序推送参数,然后调用 funcall 指令在跳转到 fun 之前将 eip 压入堆栈。然后,设置堆栈帧,使 ebp 成为堆栈的顶部,因此 arg1 必须比堆栈帧高 8 个字节:

      higher mem
+----------+---------+
| arg 3 | 4 bytes | push arg 3
+----------+---------+ (ebp + 16)
| arg 2 | 4 bytes | push arg 2
+----------+---------+ (ebp + 12)
| arg 1 | 4 bytes | push arg 1
+----------+---------+ (ebp + 8)
| ret addr | 4 bytes | call fun
+----------+---------+ (ebp + 4)
| old ebp | 4 bytes | push ebp; mov ebp, esp
+----------+---------+ <-------- (ebp + 0) STACK FRAME START
lower mem

关于c - 确定函数参数起始地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com