在调用函数之前,堆栈上的返回地址是否与程序计数器的值相同?它们似乎都与相同的概念有关,即与函数返回后将要执行的下一条指令有关。
答案 0 :(得分:3)
是。调用机制就是这样工作的(它可能不会以这种方式工作,因为不同的x86架构有不同的微体系结构,但这个"算法"给出了要点):
当执行取出的调用指令时,RIP
被临时设置为调用之后的指令的地址。执行call
会将RIP
的值推到堆栈上,然后将RIP
设置为call
目标的已解析地址。
第1卷第6章中的详细信息in the official manual。