call和ret
call指令
- cal指令是转移到指定的子程序处,后面紧跟的操作数就是给定的地址。
- 例如,call 401362表示转移到地址401362处,调用401362处的子程序,当子程序调用完毕之后就返回到call指令的下一条语句处。
- 如果想要跟踪子程序内部,可以按F7跟进;
- 如果只是想先看看子程序里面的内容再决定要不要跟踪,可以右键follow;
- 如果不想跟踪子程序内部,按下F8键,继续执行call指令的下一条语句。
ret指令
-
如果call跟进的话,ret就会返回call指令的下一条语句处的地址。
-
当执行到ret指令时,栈顶存放的一般是子程序的返回地址。
-
ret指令不仅可以用于子程序的返回,比如
PUSH 401256 RET 将401256压入到堆栈中,ret指令会将401256当做子程序的返回地址, 但其实它并不是返回地址,执行ret指令后依然可以跳转到401256地址处。