利用堆栈做循环
程序:
#include "stdio.h" int main(int argc,char *argv[]) {char *str="%d";printf("hello world");__asm{ log:lea eax,logpush eaxlea ebx,strpush ebxpush eaxcall printfret 8}return 0;}運行:一直死循環(huán)運行下去
這里我們要注意:
這個語句相當于:
add esp,8 pop eip執(zhí)行完這條語句,eip的值就是log的偏移地址,esp平衡了堆棧
執(zhí)行完lea eax,log,eax就是log地址,再壓入棧中
執(zhí)行ret 8前,eip的值是0x00401050,esp值是0x0019fed4
執(zhí)行ret后:eip的值是log的地址,所以會到log處執(zhí)行,esp的值增加了12,為什么是12呢?ret會減少4,再加個8就是12
這個程序很好,利用堆棧來循環(huán),可以用來調(diào)節(jié)流程
總結(jié)
- 上一篇: 摩尔庄园溜冰鞋怎么获得
- 下一篇: C和汇编----字符串