Assembly 在汇编编程中获取堆栈的起始地址

Assembly 在汇编编程中获取堆栈的起始地址,assembly,stack,masm,Assembly,Stack,Masm,在完成堆栈操作(如汇编编程中的push和pop)后,是否可能获得堆栈的有效起始地址?最简单的情况就是将初始堆栈指针保存到某个变量,以便在需要时访问它。如果不是这样,请使用特定于平台的API,例如Windows上的VirtualQuery,使用当前SP值作为第一个参数。基址将位于内存基本信息结构的基址字段中。在posix上,可以使用pthread函数来完成任务惯例是在函数的开头将(E)SP保存到(E)BP,并使用(E)BP进行局部变量寻址。您是指起始地址(即基址,不变)还是指堆栈顶部的地址,也就是

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

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

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

您是指起始地址(即基址,不变)还是指堆栈顶部的地址,也就是说,堆栈指针的当前值?起始基址…即使是堆栈顶部也可以..但基本基址基本地址不变-这就是堆栈指针在程序开始时开始的位置。栈顶地址是在推/弹出时更改的地址。你到底想要哪一个?假设我已经执行了一些push-pop操作,现在我想得到堆栈的底部,有可能不弹出所有其他值吗?正如@drlazy下面所说的,在开始将内容推送到堆栈之前,你只需在程序开始时保存初始堆栈指针。