让我们来看看 IDA 如何显示局部变量的地址。例如:
MOV EAX, [EBP + var_4]
众所周知,就局部变量而言,它们位于 EBP 的较低地址。
虽然,我一直认为这是理所当然和不可避免的,但我仍然很好奇。为什么 IDA 将局部变量偏移显示为[EBP + var]
,而不是[EBP - var]
?
太感谢了。
让我们来看看 IDA 如何显示局部变量的地址。例如:
MOV EAX, [EBP + var_4]
众所周知,就局部变量而言,它们位于 EBP 的较低地址。
虽然,我一直认为这是理所当然和不可避免的,但我仍然很好奇。为什么 IDA 将局部变量偏移显示为[EBP + var]
,而不是[EBP - var]
?
太感谢了。
看看var_4
函数开头的定义:
var_4 = dword ptr -4
所以它实际上是负面的。
如需更完整的图片,Ctrl+K在堆栈var上使用或双击/回车查看堆栈框架布局:
-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