我有一个问题,就像在问题中一样。现代编译器不用于ebp
处理局部变量和参数,它们只是计算并将硬编码偏移量添加到esp
. 例子:
sub esp, 5Eh
...
mov [esp+5Eh+var_1], 123h
mov [esp+5Eh+var_2], 456h
call some_func ; var_1 and var_2 point to actual addresses
cmp eax, 0 ; esp changed (stdcall), var_1 and var_2 point to wrong addresses
...
; creation of a "fake" variable example:
; var_3 = -8h
; var_4 = -12h
mov [esp+5Eh+var_3], 78h ; var_3 at: esp + 5Eh -8h
pop eax ; esp = esp + 4
mov [esp+5Eh+var_4], 89h ; var_4 at: esp + 4 + 5eh -12h = esp + 5Eh -8h = var_3
; desireable fix:
mov [esp+62h+var_3], 89h
这会导致大量开销:IDA 创建“假”局部变量(即同一个地址的多个名称),您不能随时随意检查变量,您必须创建附加注释等。所以我想知道有没有办法解决这个问题?
附注。我正在使用 IDA Pro Free。告诉我是否只能在 IDA Pro(完整版)中实现。