C++反汇编->减法分析

#include "iostream"  void main() { 	std::cout<<"Hello World"<<std::endl;//便于定位 	int a,b,c,d,e; 	a=1; 	b=2; 	c=b-a;     d=c-100;     e=-2-3; 	std::cout<<c<<std::endl; 	std::cout<<d<<std::endl; 	std::cout<<e<<std::endl; 	system("pause");//也可以看做一个定位字符 }

ollydeb分析:

地址              HEX数据                  反汇编                                                                                      注释

004015A6  |.  C745 FC 01000>MOV DWORD PTR SS:[EBP-4],1                         ;  a赋值为1 004015AD  |.  C745 F8 02000>MOV DWORD PTR SS:[EBP-8],2                         ;  b赋值为2 004015B4  |.  8B45 F8       MOV EAX,DWORD PTR SS:[EBP-8]                       ;  将b值传到EAX中 004015B7  |.  2B45 FC       SUB EAX,DWORD PTR SS:[EBP-4]                       ;  将a值传到EAX中,并执行减法运算 004015BA  |.  8945 F4       MOV DWORD PTR SS:[EBP-C],EAX                       ;  将EAX值传到c中 004015BD  |.  8B4D F4       MOV ECX,DWORD PTR SS:[EBP-C]                       ;  将c值复制到ECX中 004015C0  |.  83E9 64       SUB ECX,64                                         ;  将c与100相减 004015C3  |.  894D F0       MOV DWORD PTR SS:[EBP-10],ECX                      ;  将ECX值传送到d当中 004015C6  |.  C745 EC FBFFF>MOV DWORD PTR SS:[EBP-14],-5                       ;  将-5传送到e中(编译阶段完成计算) 004015CD  |.  68 C8104000   PUSH test1.004010C8 004015D2  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]                       ;  输出c 004015D5  |.  52            PUSH EDX 004015D6  |.  B9 A0DE4700   MOV ECX,OFFSET test1.D@MODE@?$CK?$CKargv?5?$CB?$DN> 004015DB  |.  E8 1FFBFFFF   CALL test1.004010FF 004015E0 >|.  8BC8          MOV ECX,EAX 004015E2  |.  E8 F9FBFFFF   CALL test1.004011E0 004015E7  |.  68 C8104000   PUSH test1.004010C8 004015EC  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                      ;  输出d 004015EF  |.  50            PUSH EAX                                           ;  pause 004015F0  |.  B9 A0DE4700   MOV ECX,OFFSET test1.D@MODE@?$CK?$CKargv?5?$CB?$DN> 004015F5  |.  E8 05FBFFFF   CALL test1.004010FF 004015FA  |.  8BC8          MOV ECX,EAX 004015FC  |.  E8 DFFBFFFF   CALL test1.004011E0 00401601  |.  68 C8104000   PUSH test1.004010C8 00401606  |.  8B4D EC       MOV ECX,DWORD PTR SS:[EBP-14]                      ;  输出e 00401609  |.  51            PUSH ECX 0040160A  |.  B9 A0DE4700   MOV ECX,OFFSET test1.D@MODE@?$CK?$CKargv?5?$CB?$DN> 0040160F  |.  E8 EBFAFFFF   CALL test1.004010FF 00401614  |.  8BC8          MOV ECX,EAX 00401616  |.  E8 C5FBFFFF   CALL test1.004011E0 0040161B  |.  68 1C004700   PUSH OFFSET test1._Lk                              ; /pause 00401620 >|.  E8 9BF30100   CALL test1.system                                  ; \system 
分析得出:

 1. 减法运算没有使用加负数的表现形式。

 2.对于常熟相加减,没有调用sub,add指令,直接运算后赋值。

 3.当加数为负数时,执行为减法操作。

你可能感兴趣的:(C++反汇编->减法分析)