您的位置:首页 > 编程语言 > C语言/C++

C++反汇编->if语句分析

2014-04-11 09:40 246 查看
#include <iostream>  void main() { 	std::cout<<"hello world"<<std::endl; 	int a=8; 	int b; 	b=a>7?1:4;      	if (b==1) 	{ 		std::cout<<"b equal 1"<<std::endl; 	}  	else 	{ 		std::cout<<"b equal 2"<<std::endl; 	} 	system("pause"); }
先贴一段代码,对于if语句的分析,首先理清想做什么。
判断语句有几种
1.条件表达式:表达式1?表达式2:表达式3
2.if语句
3.switch语句
首先来分析if语句吧:
DEBUG版:
0040117D   .  68 3C404300   PUSH OFFSET test3.??_C@_0M@BNI@hello?5wo>;  ASCII "hello world" 00401182   .  68 50B54300   PUSH OFFSET test3.std::cout 00401187   .  E8 14FFFFFF   CALL test3.004010A0 0040118C   .  83C4 08       ADD ESP,8                                ;  a赋值为8 0040118F   .  8BC8          MOV ECX,EAX                              ;  申明b 00401191   .  E8 DDFEFFFF   CALL test3.00401073 00401196   .  C745 FC 08000>MOV DWORD PTR SS:[EBP-4],8               ;  传值8到 ebp-4 中 0040119D   .  33C0          XOR EAX,EAX                              ;  清空EAX 0040119F   .  837D FC 07    CMP DWORD PTR SS:[EBP-4],7               ;  8与7比较 004011A3   .  0F9EC0        SETLE AL                                 ;  是否大于7  大于则AL为1 004011A6   .  48            DEC EAX                                  ;  操作数自减1  EAX为0 004011A7   .  24 FD         AND AL,0FD                               ;  AL与 11111101作与运算 004011A9   .  83C0 04       ADD EAX,4                                ;  EAX加4 004011AC   .  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX             ;  4  MOV 到 b中 004011AF   .  837D F8 01    CMP DWORD PTR SS:[EBP-8],1               ;  比较指令  b值与1比较 004011B3   .  75 20         JNZ SHORT test3.004011D5                 ;  与1不相等则跳转到 地址004011EE  输出b equal 2语句 004011B5   .  68 28104000   PUSH test3.00401028 004011BA   .  68 30404300   PUSH OFFSET test3.??_C@_09MFLH@b?5equal?>;  相等 则输出b equal 1 004011BF   .  68 50B54300   PUSH OFFSET test3.std::cout 004011C4   .  E8 D7FEFFFF   CALL test3.004010A0 004011C9   .  83C4 08       ADD ESP,8 004011CC   .  8BC8          MOV ECX,EAX 004011CE   .  E8 A0FEFFFF   CALL test3.00401073 004011D3   .  EB 1E         JMP SHORT test3.004011F3 004011D5   >  68 28104000   PUSH test3.00401028 004011DA   .  68 24404300   PUSH OFFSET test3.??_C@_09DKAO@b?5equal?>;  ASCII "b equal 2" 004011DF   .  68 50B54300   PUSH OFFSET test3.std::cout 004011E4   .  E8 B7FEFFFF   CALL test3.004010A0 004011E9   .  83C4 08       ADD ESP,8 004011EC   .  8BC8          MOV ECX,EAX 004011EE   .  E8 80FEFFFF   CALL test3.00401073 004011F3   >  68 1C404300   PUSH OFFSET test3.??_C@_05PBCN@pause?$AA>; /command = "pause" 004011F8   .  E8 737E0000   CALL test3.system                        ; \system
if语句主要调用了 CMP指令 和 JNZ指令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: