本文为张银奎老师《代码调试》一书中关于的栈实验,记录下照猫画虎的学习过程。
代码:
汇编如下:
bp a!main 设置断点 g执行到这个断点
0:000> r eip,esp
eip=00401020 esp=0013ff84
0:000> dd esp l1
0013ff84 00401115
p单步执行一次
0:000> r eip,esp
eip=00401022 esp=0013ff80
esp中压入一个int所需空间,向下减去4
t进入函数
0:000> r eip,esp
eip=00401000 esp=0013ff7c
esp又减去4个字节,压入了函数的返回后的地址 可以用dd esp l1显示返回地址的内容
0:000> dd esp l1
0013ff7c 00401027
光标定位到ret 4一行,ctrl+F10执行到这一行,观察eip和esp
0:000> r eip,esp
eip=0040101a esp=0013ff7c
esp内容和刚进入函数时一样,栈保持平衡。
p单步执行,到达c3 ret
0:000> r eip,esp
eip=00401027 esp=0013ff84
esp增加了8,和刚进入main时一样,参数被被调用函数func清理。
0:000> dd esp l1
0013ff84 00401115