C++反汇编->循环语句分析
来源:互联网 发布:rsa512算法 编辑:程序博客网 时间:2024/05/22 14:35
先写个代码:
void main(){ int a=9; cout<<"tip1"<<endl;for (int i=0;i<a;i++){cout<<i<<endl;} cout<<"tip2"<<endl;do { cout<<a<<endl;a--;} while (a);cout<<"tip3"<<endl; while(a<9){cout<<a<<endl;a++;}cout<<"tip4"<<endl; system("pause");}
DEBUG版本的分析:
00401648 . C745 FC 09000>MOV DWORD PTR SS:[EBP-4],9 ; a=90040164F . 68 C8104000 PUSH test5.004010C800401654 . 68 44004700 PUSH OFFSET test5.??_C@_04HPCL@tip1?$AA@ ; tip100401659 . 68 A0DE4700 PUSH OFFSET test5.std::cout0040165E . E8 27FCFFFF CALL test5.0040128A00401663 . 83C4 08 ADD ESP,800401666 . 8BC8 MOV ECX,EAX00401668 . E8 73FBFFFF CALL test5.004011E0 ; 下面开始for循环0040166D . C745 F8 00000>MOV DWORD PTR SS:[EBP-8],0 ; int i=000401674 . EB 09 JMP SHORT test5.0040167F00401676 > 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]00401679 . 83C0 01 ADD EAX,1 ; 累加10040167C . 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; i++0040167F > 8B4D F8 MOV ECX,DWORD PTR SS:[EBP-8]00401682 . 3B4D FC CMP ECX,DWORD PTR SS:[EBP-4] ; i与a比较大小00401685 . 7D 1C JGE SHORT test5.004016A3 ; 大于等于则跳转 执行cout<<"tip2"<<endl;结束循环00401687 . 68 C8104000 PUSH test5.004010C80040168C . 8B55 F8 MOV EDX,DWORD PTR SS:[EBP-8]0040168F . 52 PUSH EDX ; out i00401690 . B9 A0DE4700 MOV ECX,OFFSET test5.std::cout00401695 . E8 65FAFFFF CALL test5.004010FF0040169A . 8BC8 MOV ECX,EAX0040169C . E8 3FFBFFFF CALL test5.004011E0004016A1 .^ EB D3 JMP SHORT test5.00401676 ; 回跳到00401676004016A3 > 68 C8104000 PUSH test5.004010C8004016A8 . 68 3C004700 PUSH OFFSET test5.??_C@_04IAJC@tip2?$AA@ ; tip2004016AD . 68 A0DE4700 PUSH OFFSET test5.std::cout004016B2 . E8 D3FBFFFF CALL test5.0040128A004016B7 . 83C4 08 ADD ESP,8004016BA . 8BC8 MOV ECX,EAX004016BC . E8 1FFBFFFF CALL test5.004011E0 ; 下面开始 do循环004016C1 > 68 C8104000 PUSH test5.004010C8004016C6 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]004016C9 . 50 PUSH EAX ; out a004016CA . B9 A0DE4700 MOV ECX,OFFSET test5.std::cout004016CF . E8 2BFAFFFF CALL test5.004010FF004016D4 . 8BC8 MOV ECX,EAX004016D6 . E8 05FBFFFF CALL test5.004011E0004016DB . 8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]004016DE . 83E9 01 SUB ECX,1 ; a++004016E1 . 894D FC MOV DWORD PTR SS:[EBP-4],ECX004016E4 . 837D FC 00 CMP DWORD PTR SS:[EBP-4],0 ; 0与a比较004016E8 .^ 75 D7 JNZ SHORT test5.004016C1 ; 0小于等于a则跳转到 004016C1004016EA . 68 C8104000 PUSH test5.004010C8004016EF . 68 34004700 PUSH OFFSET test5.??_C@_04CKAF@tip3?$AA@ ; tip3004016F4 . 68 A0DE4700 PUSH OFFSET test5.std::cout004016F9 . E8 8CFBFFFF CALL test5.0040128A004016FE . 83C4 08 ADD ESP,800401701 . 8BC8 MOV ECX,EAX00401703 . E8 D8FAFFFF CALL test5.004011E0 ; 开始while 循环00401708 > 837D FC 09 CMP DWORD PTR SS:[EBP-4],9 ; 9与a比较0040170C . 7D 25 JGE SHORT test5.00401733 ; 9大于等于a则跳出0040170E . 68 C8104000 PUSH test5.004010C800401713 . 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]00401716 . 52 PUSH EDX ; out a00401717 . B9 A0DE4700 MOV ECX,OFFSET test5.std::cout0040171C . E8 DEF9FFFF CALL test5.004010FF00401721 . 8BC8 MOV ECX,EAX00401723 . E8 B8FAFFFF CALL test5.004011E000401728 . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]0040172B . 83C0 01 ADD EAX,1 ; a++0040172E . 8945 FC MOV DWORD PTR SS:[EBP-4],EAX00401731 .^ EB D5 JMP SHORT test5.0040170800401733 > 68 C8104000 PUSH test5.004010C800401738 . 68 2C004700 PUSH OFFSET test5.??_C@_04HPOA@tip4?$AA@ ; tip40040173D . 68 A0DE4700 PUSH OFFSET test5.std::cout00401742 . E8 43FBFFFF CALL test5.0040128A00401747 . 83C4 08 ADD ESP,80040174A . 8BC8 MOV ECX,EAX0040174C . E8 8FFAFFFF CALL test5.004011E000401751 . 6A 09 PUSH 900401753 . E8 CEFAFFFF CALL test5.0040122600401758 . 83C4 04 ADD ESP,40040175B . 68 24004700 PUSH OFFSET test5.??_C@_05PBCN@pause?$AA@ ; /pause00401760 . E8 FBF30100 CALL test5.system ; \system小结:for:先初始化,然后判断,执行函数。
do:先执行函数,再判断。
while:先判断,再执行函数。
0 0
- C++反汇编->循环语句分析
- C语言三种循环反汇编分析
- switch语句反汇编分析
- C语言流程控制语句的反汇编分析
- 一起来学反汇编之循环语句
- C反汇编示例分析
- c++反汇编代码分析--循环结构
- c++反汇编代码分析--循环结构
- C++反汇编->if语句分析
- 反汇编个人练习:不用循环语句实现循环操作
- C++反汇编学习笔记2——循环语句
- C库字符串反汇编分析
- C程序反汇编代码分析
- 汇编反FOR 循环
- 反汇编【for循环】
- 反汇编一个简单的C程序,分析汇编代码
- C语言 基础反汇编——for循环
- C语句和反汇编代码对照表
- 分享基于Flash AIR和Starling、Feathers的经验积累
- 代码面试最常用的10大算法
- app应用下载安装见解
- Floodlight+Mininet搭建OpenFlow(五):复杂网络
- 主流平板电视接口详析
- C++反汇编->循环语句分析
- 蓝牙协议栈实现模式分析
- Android Performance(1) StrictMode
- MVC Html.AntiForgeryToken() 防止CSRF攻击
- asterisk1.8 账号信息mysql存储(动态)
- 如何在 performSelector: withObject:afterDelay 的Object里传入多个参数
- 如何学习开源项目及Ceph的浅析
- 服务端 高性能 (三) network
- 正则表达式