在内存中以 DATA1 和 DATA2 为首地址代表两个数据,DATA1 和 DATA2 分别分 配 5 个字节单元,分别存入用压缩 BCD 码表示的 8 位十进制数(低位在前),编 程将两数相加,并将结果存储到 DATA3 中
visual 工具很强大。
你用c++写一下 然后进行反编译不就好了。
int main() {
008D1800 push ebp
008D1801 mov ebp,esp
008D1803 sub esp,0FCh
008D1809 push ebx
008D180A push esi
008D180B push edi
008D180C lea edi,[ebp-0FCh]
008D1812 mov ecx,3Fh
008D1817 mov eax,0CCCCCCCCh
008D181C rep stos dword ptr es:[edi]
008D181E mov ecx,offset _FA494EA5_main@cpp (08DC02Ah)
008D1823 call @__CheckForDebuggerJustMyCode@4 (08D130Ch)
char DATA1[5];
char DATA2[5];
char DATA3[5];
for (int i = 0; i < 5; i++) {
008D1828 mov dword ptr [ebp-38h],0
008D182F jmp main+3Ah (08D183Ah)
008D1831 mov eax,dword ptr [ebp-38h]
008D1834 add eax,1
008D1837 mov dword ptr [ebp-38h],eax
008D183A cmp dword ptr [ebp-38h],5
008D183E jge main+75h (08D1875h)
DATA1[i] = '1' + i;
008D1840 mov eax,dword ptr [ebp-38h]
008D1843 add eax,31h
008D1846 mov ecx,dword ptr [ebp-38h]
008D1849 mov byte ptr DATA1[ecx],al
DATA2[i] = '1' + i;
008D184D mov eax,dword ptr [ebp-38h]
008D1850 add eax,31h
008D1853 mov ecx,dword ptr [ebp-38h]
008D1856 mov byte ptr DATA2[ecx],al
DATA3[i] = DATA1[i]+ DATA2[i];
008D185A mov eax,dword ptr [ebp-38h]
008D185D movsx ecx,byte ptr DATA1[eax]
008D1862 mov edx,dword ptr [ebp-38h]
008D1865 movsx eax,byte ptr DATA2[edx]
008D186A add ecx,eax
008D186C mov edx,dword ptr [ebp-38h]
008D186F mov byte ptr DATA3[edx],cl
}
008D1873 jmp main+31h (08D1831h)
}
int main() {
00C01800 push ebp
00C01801 mov ebp,esp
00C01803 sub esp,0FCh
00C01809 push ebx
00C0180A push esi
00C0180B push edi
00C0180C lea edi,[ebp-0FCh]
00C01812 mov ecx,3Fh
00C01817 mov eax,0CCCCCCCCh
00C0181C rep stos dword ptr es:[edi]
00C0181E mov eax,dword ptr [__security_cookie (0C0A024h)]
00C01823 xor eax,ebp
00C01825 mov dword ptr [ebp-4],eax
00C01828 mov ecx,offset _FA494EA5_main@cpp (0C0C02Ah)
00C0182D call @__CheckForDebuggerJustMyCode@4 (0C0130Ch)
char DATA1[5];
char DATA2[5];
int DATA3 = 0;
00C01832 mov dword ptr [DATA3],0
for (int i = 0; i < 5; i++) {
00C01839 mov dword ptr [ebp-38h],0
00C01840 jmp main+4Bh (0C0184Bh)
00C01842 mov eax,dword ptr [ebp-38h]
00C01845 add eax,1
00C01848 mov dword ptr [ebp-38h],eax
00C0184B cmp dword ptr [ebp-38h],5
00C0184F jge main+6Dh (0C0186Dh)
DATA1[i] = '1' + i;
00C01851 mov eax,dword ptr [ebp-38h]
00C01854 add eax,31h
00C01857 mov ecx,dword ptr [ebp-38h]
00C0185A mov byte ptr DATA1[ecx],al
DATA2[i] = '1' + i;
00C0185E mov eax,dword ptr [ebp-38h]
00C01861 add eax,31h
00C01864 mov ecx,dword ptr [ebp-38h]
00C01867 mov byte ptr DATA2[ecx],al
}
00C0186B jmp main+42h (0C01842h)
DATA3 = atoi(DATA1) + atoi(DATA2);
00C0186D mov esi,esp
00C0186F lea eax,[DATA1]
00C01872 push eax
00C01873 call dword ptr [__imp__atoi (0C0B174h)]
00C01879 add esp,4
00C0187C cmp esi,esp
00C0187E call __RTC_CheckEsp (0C01235h)
00C01883 mov esi,eax
00C01885 mov edi,esp
00C01887 lea ecx,[DATA2]
00C0188A push ecx
00C0188B call dword ptr [__imp__atoi (0C0B174h)]
00C01891 add esp,4
00C01894 cmp edi,esp
00C01896 call __RTC_CheckEsp (0C01235h)
00C0189B add esi,eax
00C0189D mov dword ptr [DATA3],esi
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632