利用堆栈做循环
程序:
#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;}運(yùn)行:一直死循環(huán)運(yùn)行下去
這里我們要注意:
這個(gè)語(yǔ)句相當(dāng)于:
add esp,8 pop eip執(zhí)行完這條語(yǔ)句,eip的值就是log的偏移地址,esp平衡了堆棧
執(zhí)行完lea eax,log,eax就是log地址,再壓入棧中
執(zhí)行ret 8前,eip的值是0x00401050,esp值是0x0019fed4
執(zhí)行ret后:eip的值是log的地址,所以會(huì)到log處執(zhí)行,esp的值增加了12,為什么是12呢?ret會(huì)減少4,再加個(gè)8就是12
這個(gè)程序很好,利用堆棧來(lái)循環(huán),可以用來(lái)調(diào)節(jié)流程
總結(jié)
- 上一篇: 摩尔庄园溜冰鞋怎么获得
- 下一篇: C和汇编----字符串