为什么 0xc(%ebp) 变成双字 [ebp+arg_3]?

逆向工程 雷达2
2021-07-08 12:46:00

我正在反转 x86 二进制文件,并且有一条使用 at&t 语法的指令是

movl 0xc(%ebp), %eax

使用英特尔语法时

mov eax, dword [ebp+arg_3]

我正在使用radare2,并在函数开始时打印

; arg int arg_0_1      @ ebp+0x1
; arg int arg_3        @ ebp+0xc

为什么[ebp+arg_3]而不是简单的替换像[arg_3]

1个回答

对的引用ebp明确了哪个寄存器用于访问变量,以及引用是相对的,而不是绝对的。esp如果不存在堆栈帧,编译器可能会生成一条指令,而如果代码是手工编写的,则使用任何其他寄存器。

此外,显示仅[arg_3]意味着访问等效于另一个内存位置,例如[401000h],但使用名称而不是数字。