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++反汇编->减法分析,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。