其他的都还好,就是原题里面
初始化的时候sub esp,0e8h
我的是0040D533 sub esp,50h,相差152个数呢。
就算把Int全部搞成长整形也没有这个数啊。
0040D53C mov ecx,14h
而原题里面的是mov ecx,3ah
怎么都不一样啊,难道是编译器不一样的原因?
敬待高手解惑。
我逆向的代码是楚狂人的《天书夜读》上的一个思考与练习
int myfunction(int a, int b) {
int d= a + b;
int i=1;
int c=0;
while (c<100) c=c+i;
switch (c)
{
case 0 :
{
d=1;
}
case 1 :
{
d=c;break;
}
default : d=0;
}
return d;
}
void main() {
int a,b;
a=b=0x8899;
a=myfunction(a,b);
}
编译过来的汇编的代码
1: int myfunction(int a, int b) {
0040D530 push ebp
0040D531 mov ebp,esp
0040D533 sub esp,50h
0040D536 push ebx
0040D537 push esi
0040D538 push edi
0040D539 lea edi,[ebp-50h]
0040D53C mov ecx,14h
0040D541 mov eax,0CCCCCCCCh
0040D546 rep stos dword ptr [edi]
2: int d= a + b;
0040D548 mov eax,dword ptr [ebp+8]
0040D54B add eax,dword ptr [ebp+0Ch]
0040D54E mov dword ptr [ebp-4],eax
3: int i=1;
0040D551 mov dword ptr [ebp-8],1
4: int c=0;
0040D558 mov dword ptr [ebp-0Ch],0
5: while (c<100) c=c+i;
0040D55F cmp dword ptr [ebp-0Ch],64h
0040D563 jge myfunction+40h (0040d570)
0040D565 mov ecx,dword ptr [ebp-0Ch]
0040D568 add ecx,dword ptr [ebp-8]
0040D56B mov dword ptr [ebp-0Ch],ecx
0040D56E jmp myfunction+2Fh (0040d55f)
6: switch (c)
7: {
0040D570 mov edx,dword ptr [ebp-0Ch]
0040D573 mov dword ptr [ebp-10h],edx
0040D576 cmp dword ptr [ebp-10h],0
0040D57A je myfunction+54h (0040d584)
0040D57C cmp dword ptr [ebp-10h],1
0040D580 je myfunction+5Bh (0040d58b)
0040D582 jmp myfunction+63h (0040d593)
8: case 0 :
9: {
10: d=1;
0040D584 mov dword ptr [ebp-4],1
11: }
12: case 1 :
13: {
14: d=c;break;
0040D58B mov eax,dword ptr [ebp-0Ch]
0040D58E mov dword ptr [ebp-4],eax
0040D591 jmp myfunction+6Ah (0040d59a)
15: }
16: default : d=0;
0040D593 mov dword ptr [ebp-4],0
17: }
18: return d;
0040D59A mov eax,dword ptr [ebp-4]
19: }
0040D59D pop edi
0040D59E pop esi
0040D59F pop ebx
0040D5A0 mov esp,ebp
0040D5A2 pop ebp
0040D5A3 ret
其他的都还好,就是原题里面
初始化的时候sub esp,0e8h
我的是0040D533 sub esp,50h,相差152个数呢。
就算把Int全部搞成长整形也没有这个数啊。
0040D53C mov ecx,14h
而原题里面的是mov ecx,3ah
怎么都不一样啊,难道是编译器不一样的原因?
敬待高手解惑。
[课程]Android-CTF解题方法汇总!