【问题标题】:Need help understanding Assembly interaction with stack需要帮助了解 Assembly 与堆栈的交互
【发布时间】:2011-09-22 10:40:26
【问题描述】:

好的,这就是交易。据我了解,您可以对汇编中的堆栈执行类似的操作:

push 5
push 6

好的,现在我们在堆栈上:6 5

所以

pop eax

将 6 放入 eax 正确吗?但是,如果我们希望抓取 5 或在 6 或 5 之前压入堆栈的某个值怎么办。我们将如何抓取它? (不弹出顶部值)

我看过这个:How does the stack work in assembly language? 而且您似乎无法根据汇编中堆栈中的地址访问事物。然而,这对我来说似乎没有多大意义。或者有没有一种方法可以在不从顶部“弹出”东西的情况下遍历堆栈。谢谢,抱歉这个“愚蠢”的问题!

【问题讨论】:

  • 不是真正的程序集特定的。可能想让问题更笼统,以获得更好的回答。堆栈是计算机科学的基本结构之一。

标签: gcc assembly x86


【解决方案1】:

堆栈是一个内存位置,就像其他任何位置一样。 ESP 寄存器指向当前栈顶(栈在内存中向下增长,因此push 指令将减少 ESP 寄存器)。

您可以通过从寄存器索引来访问堆栈上的特定值:

mov ebp,esp
mov eax,[ebp+4]

(如果我没记错的话,你不能直接用 ESP 使用偏移寻址模式,但是你可以用 EBP。)

【讨论】:

    【解决方案2】:

    堆栈指针(由pushpop 操作)只是一个寄存器; esp。您可以偏移该寄存器以访问相对于当前堆栈顶部的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-19
      • 2017-06-19
      • 2016-05-03
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多