【问题标题】:getting starting address of a stack in assembly programming在汇编编程中获取堆栈的起始地址
【发布时间】:2011-01-22 07:23:22
【问题描述】:

在汇编编程中完成push和pop等堆栈操作后,是否可以获得堆栈的有效起始地址?

【问题讨论】:

  • 你是说起始地址(即基地址,不会改变)还是真的是栈顶地址,即栈指针的当前值?
  • 起始基地址...即使栈顶也可以...但最好是基地址
  • 基地址不会改变 - 这是堆栈指针从程序开始处开始的地方。堆栈地址的顶部是您推送/弹出时发生的变化。你真正想要哪一个?
  • 假设我已经执行了一些推送弹出操作,现在我想获取堆栈的底部是否可以不弹出所有其他值?
  • 正如@drlazy 下面所说,您可以在程序开始时保存初始堆栈指针,然后再开始将内容压入堆栈。

标签: assembly stack masm


【解决方案1】:

约定是在函数的开头将 (E)SP 保存到 (E)BP,并使用 (E)BP 进行局部变量寻址。

【讨论】:

    【解决方案2】:

    最简单的情况就是将初始堆栈指针保存到某个变量以在需要时访问它。如果不是这种情况,请使用特定于平台的 API,例如 Windows 上的 VirtualQuery,使用当前 SP 值作为第一个参数。基地址将在 MEMORY_BASIC_INFORMATION 结构的 BaseAddress 字段中。 posix 任务可以使用 pthread 函数完成

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-08
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多