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

来源:互联网 发布:优化排名 编辑:程序博客网 时间:2024/05/18 20:08

#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赋值为1004015AD  |.  C745 F8 02000>MOV DWORD PTR SS:[EBP-8],2                         ;  b赋值为2004015B4  |.  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.004010C8004015D2  |.  8B55 F4       MOV EDX,DWORD PTR SS:[EBP-C]                       ;  输出c004015D5  |.  52            PUSH EDX004015D6  |.  B9 A0DE4700   MOV ECX,OFFSET test1.D@MODE@?$CK?$CKargv?5?$CB?$DN>004015DB  |.  E8 1FFBFFFF   CALL test1.004010FF004015E0 >|.  8BC8          MOV ECX,EAX004015E2  |.  E8 F9FBFFFF   CALL test1.004011E0004015E7  |.  68 C8104000   PUSH test1.004010C8004015EC  |.  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]                      ;  输出d004015EF  |.  50            PUSH EAX                                           ;  pause004015F0  |.  B9 A0DE4700   MOV ECX,OFFSET test1.D@MODE@?$CK?$CKargv?5?$CB?$DN>004015F5  |.  E8 05FBFFFF   CALL test1.004010FF004015FA  |.  8BC8          MOV ECX,EAX004015FC  |.  E8 DFFBFFFF   CALL test1.004011E000401601  |.  68 C8104000   PUSH test1.004010C800401606  |.  8B4D EC       MOV ECX,DWORD PTR SS:[EBP-14]                      ;  输出e00401609  |.  51            PUSH ECX0040160A  |.  B9 A0DE4700   MOV ECX,OFFSET test1.D@MODE@?$CK?$CKargv?5?$CB?$DN>0040160F  |.  E8 EBFAFFFF   CALL test1.004010FF00401614  |.  8BC8          MOV ECX,EAX00401616  |.  E8 C5FBFFFF   CALL test1.004011E00040161B  |.  68 1C004700   PUSH OFFSET test1._Lk                              ; /pause00401620 >|.  E8 9BF30100   CALL test1.system                                  ; \system
分析得出:

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

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

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

0 0
原创粉丝点击