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