-
-
逆向简单函数时遇到的一些问题
-
发表于:
2012-6-19 04:29
3958
-
加密与解密第72页的源码。稍加改动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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;
}
|
按照书上讲的,反汇编出来的代码应该类似于这样子的:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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()结束
|
但是我自己反汇编出来时这样子的!
1 2 3 4 5 6 7 8 9 | 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,但是为什么反汇编出来的代码没有呢。而且打印字符串与打印数字应该不在同一个函数里德,为什么我反汇编出来在一个函数里呢?求大神指教
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!