关于一个简单call的分析2
一、汇编代码
push ebp
mov ebp,esp
sub ebp,0x48
push ebx
push esi
push edi
lea edi,[ebp-0x48]
mov ecx,0x12
mov eax,0xcccccccc
rep stos dowrd ptr ds:[edi]
mov eax,dowrd ptr ds:[ebp+8]
cmp eax,dword ptr ds:[ebp+0x0c]
jle 00401059
mov ecx,dword ptr ds:[ebp+8]
mov dword ptr [004225c4],ecx
pop edi
pop esi
pop ebx
mov ebp,esp
pop ebp
ret 4
二、分析过程
函数内部功能分析:
1、分析参
1 [ebp+8]:x
2 [ebp+0x0c]:y
2、分析局部变量
无
3、分析全局变量
mov dword ptr [004225c4],ecx
有直接寻址,可能是全局变量,看dword 和eax知道宽度是4个字节。
4、功能分析
mov eax,dowrd ptr ds:[ebp+8]
cmp eax,dword ptr ds:[ebp+0x0c]
将参数x存到eax中,然后比较eax与y
如果x<=y 那么跳转到00401059
否则将x的值存储到全局变量
5、返回值分析
无
6、反编译为C语言
int g_nNum;
void Fun(int x,int y)
{
if(x>y)
{
g_nNum = x;
}
}