我正在使用 IDApro 免费版本,我想知道为什么有时会出现类似...
mov [esp + 1140h + var_1234], ebx
如果您在括号内单击,然后点击字母 K(代表堆栈变量视图)
它可以变成类似
mov [esp], ebx
或者
mov [esp+4], ebx
为什么从 1140h 到突然没有了一个巨大的跳跃?这里发生了什么?
先感谢您。
我正在使用 IDApro 免费版本,我想知道为什么有时会出现类似...
mov [esp + 1140h + var_1234], ebx
如果您在括号内单击,然后点击字母 K(代表堆栈变量视图)
它可以变成类似
mov [esp], ebx
或者
mov [esp+4], ebx
为什么从 1140h 到突然没有了一个巨大的跳跃?这里发生了什么?
先感谢您。
IDA 在函数开始时将局部变量声明为 var_XXX
在下面的粘贴中 var_108 被声明为 dword ptr -108h
所以 0x10c - 108 = 4 如果你打 K ida 会告诉你
.text:0040115C lea eax, [esp+4]
如果我觉得它令人困惑并且更喜欢 [esp+4] 到[esp + x + (-y) ]我在我对这个问题的回答中使用了这个脚本
.text:00401150 sub_401150 proc near ; CODE XREF: sub_4011BC+53p
.text:00401150
.text:00401150 var_108 = dword ptr -108h
.text:00401150 arg_0 = dword ptr 8
.text:00401150
.text:00401150 push ebx
.text:00401151 add esp, 0FFFFFEF8h
.text:00401157 push 105h
.text:0040115C lea eax, [esp+10Ch+var_108]
正如 RedLexus 评论的那样,本地变量为负是有原因的
当您推送参数并调用函数时,堆栈布局将是这样的
esp+0x00 -> return addrss
esp+0x04 _. arguments that were pushed follows from here
esp-0x4 upto stack top address viz esp - 0xxxx
函数可利用所有负值来存储仅在函数范围内特定的临时变量
也就是说,如果你有一个功能
rettype calling convention somefunction (args 1.2,....,n)
{
local vars
char foo[0x100]
ulong blah
int bar;
function body follows
}
编译器/汇编器理论上会在 esp -0x108 处为int bar提供空间