让我们看一下IDA如何显示局部变量的地址。例如:

MOV EAX, [EBP + var_4]


众所周知,就局部变量而言,它们位于EBP的低位。



尽管,我一直认为这是理所当然和不可避免的,但我仍然很好奇。为什么IDA将局部变量偏移显示为[EBP + var]而不是[EBP - var]

非常感谢。

#1 楼

请看一下函数开始处的var_4定义:

var_4 = dword ptr -4


所以实际上它是负数。

更完整图片,使用Ctrl + K或在堆栈变量上双击/输入以查看堆栈框架布局:

-00000018 ; Two special fields " r" and " s" represent return address and saved registers.
-00000018 ; Frame size: 18; Saved regs: 4; Purge: 0
-00000018 ;
-00000018
-00000018 var_18          dd ?
-00000014 var_14          dd ?
-00000010 var_10          db 12 dup(?)
-00000004 var_4           dd ?
+00000000  s              db 4 dup(?)
+00000004  r              db 4 dup(?)
+00000008 arg_0           dd ?
+0000000C
+0000000C ; end of stack variables