go0x.com - 烂橘子 - go0x.com

Description: 专注于技术,享受编程带来的快乐

next (2149) hexo (1154)

Example domain paragraphs

ZERO to ONE

想要循环调用一个函数,其实有很多种方法,除了以下常见实现方式(for ,while),还可以通过修改rip寄存器来实现循环,文章末尾会介绍具体的案例。

main函数中调用loop,调用堆栈如下图所示: 在main函数的栈帧中可以看到,会将loop函数(例子中没有参数)参数入栈,随后保存PC(即main中printf的地址)。通过call指令实现将PC值push到栈中,并将PC设置为loop函数的地址。loop执行后调用ret指令,从栈中保存的返回地址恢复到PC中,从而main函数继续执行。