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