我正在反转 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]?
我正在反转 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]?
对的引用ebp明确了哪个寄存器用于访问变量,以及引用是相对的,而不是绝对的。esp如果不存在堆栈帧,编译器可能会生成一条指令,而如果代码是手工编写的,则使用任何其他寄存器。
此外,显示仅[arg_3]意味着访问等效于另一个内存位置,例如[401000h],但使用名称而不是数字。