逆向简单函数时遇到的一些问题
发表于:
2012-6-19 04:29
3959
加密与解密第72页的源码。稍加改动
#include "stdafx.h"
int add (int x,int y);
void main()
{
int a = 5;
int b = 6;
int z = add(5,6);
printf("%d",z);
getchar();
}
int add(int x,int y)
{
printf("aaaaaaaaaaaaaaaaaaaaaaa");
int z= x+y;
return z;
}
按照书上讲的,反汇编出来的代码应该类似于这样子的:
push 6
push 5
call 00401010 ;此处调用add()函数
add esp,8
xor eax,eax
retn
nop
mov eax, dword ptr [esp+8] ;add()实现
mov ecx, dword ptr [esp+4]
add eax,ecx
retn ;add()结束
但是我自己反汇编出来时这样子的!
00401000 /$ 68 6CB14000 push 0040B16C ; ASCII "aaaaaaaaaaaaaaaaaaaaaaa"
00401005 |. E8 17000000 call 00401021 ; printf
0040100A |. 6A 0B push 0B
0040100C |. 68 84B14000 push 0040B184 ; ASCII "%d"
00401011 |. E8 0B000000 call 00401021 ; prinf
00401016 |. 83C4 0C add esp, 0C
00401019 |. E8 D5000000 call 004010F3
0040101E |. 33C0 xor eax, eax
00401020 \. C3 retn
printf("aaaaaaaaaaaaaaaa")后面应该有个调用add()的call,但是为什么反汇编出来的代码没有呢。而且打印字符串与打印数字应该不在同一个函数里德,为什么我反汇编出来在一个函数里呢?求大神指教
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)