【发布时间】:2014-03-02 22:52:09
【问题描述】:
我知道,例如push eax 会将 eax 保存到堆栈中并将 esp 减 4。而 push dword ptr 意味着它需要推送 4 个字节,但后来我很困惑。另外,如果是 [esi+22] 会是一样的吗?
【问题讨论】:
-
这很快,谢谢Kerrek。请问,仅根据最后一条指令,读者无法知道它是指向 ebp+ 还是 ebp- 是否正确?
-
抱歉,我不太明白这个问题——“它”是谁? “读者”是什么意思?阅读源代码,还是检查堆栈?
-
(请在答案中添加评论 - 这样我会收到通知。这次我碰巧看到您的评论。或者添加“@name”标记。)
-
好的,谢谢@KerrekSB,下次我会知道的。描述我的困惑的最简单方法是举个例子,如果 'push DWORD [ebx + 42]' 是 'push DWORD [EBP+42]' 我知道这将是一个参数,并且知道堆栈中的位置。虽然不知道 ebx 中的值,但无法知道它相对于 ebp 的偏移量(不检查堆栈,仅基于该行源代码。我希望这听起来不是一个愚蠢的问题,只是想弄清楚它,谢谢。
-
如果
ebx包含数组的开头,您可能想要推送一些其他数组元素,因此需要计算偏移量...