Assembly 作为副作用影响ESP的x86指令有哪些?
我知道Assembly 作为副作用影响ESP的x86指令有哪些?,assembly,x86,callstack,stack-pointer,Assembly,X86,Callstack,Stack Pointer,我知道call和ret将修改esp的值,push和pop有很多变体,但是是否还有其他指令会影响堆栈指针?push(a/ad/f)和pop(a/ad/f)指令组正在修改堆栈指针(e)sp。中断调用int也会修改它。指令call将返回地址推送到堆栈,并ret将其删除。另外,以ret NUMBER的形式,从堆栈中删除字节数以清理堆栈 当然,您可以在其他指令中使用(e)sp,如mov或算术指令,如add或sub。它将在操作码的R/M或REG字段中表示。以下说明修改堆栈指针1: 呼叫 输入 int n/
call
和ret
将修改esp
的值,push
和pop
有很多变体,但是是否还有其他指令会影响堆栈指针?push(a/ad/f)
和pop(a/ad/f)
指令组正在修改堆栈指针(e)sp
。中断调用int
也会修改它。指令call
将返回地址推送到堆栈,并ret
将其删除。另外,以ret NUMBER
的形式,从堆栈中删除字节数以清理堆栈
当然,您可以在其他指令中使用
(e)sp
,如mov
或算术指令,如add
或sub
。它将在操作码的R/M或REG字段中表示。以下说明修改堆栈指针1:
呼叫
输入
int n/into/int 3
iret/iretd
离开
pop
推送
ret
sysenter
sysexit
pusha/pushad
popa/popad
pushf/pushfd/pushfq
popf/popfd/popfq
vmlaunch/vmresume
eexit
我没有考虑过这样的指示,以免把你的问题琐碎化 这些是我在创建此答案时通过搜索英特尔手册可以找到的所有说明。
虽然我尽了最大的努力仔细阅读手册,但我不会对清单发誓
1
SP
、ESP
或RSP
将指令INT
和插入
和IRET
以及许多其他直接控制寄存器的指令,如添加ESP,8
。有关ESP,请搜索英特尔手册第2卷←代码>?你试过查看手册吗?手册非常密集,弄清楚如何使用它们来回答这种类型的问题似乎超出了入门级课程的范围(这是我所处的级别)。例如,迈克尔上面的评论在这方面很有帮助。我相信一个“研究方法”类型的答案,而不是一个列表,对我和其他可能处于相同情况的初学者来说都是非常有价值的。“有一种方法可以寻找设置特定寄存器的指令”很有帮助。“RTFM”和“sort it out”与stackoverflow的观点几乎相反——特别是当所讨论的手册超过4500页且可能比较复杂时。ENTER
,LEAVE
也在修改堆栈指针,但这并不完全是“副作用”,更像是“主要影响”。