我逆向的代码是楚狂人的《天书夜读》上的一个思考与练习
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