int main()
{
00411A00 push ebp //在堆栈上保存EBP
00411A01 mov ebp,esp //将堆栈当前位置给EBP,以在堆栈结构中存储值时的参考点
00411A03 sub esp,0C0h //为变量分配空间
00411A09 push ebx //保存数据段值
00411A0A push esi //源地址指针
00411A0B push edi //目的地址指针
00411A0C lea edi,[ebp-0C0h] //装入有效地址,用来得到局部变量和函数参数的指针。这里[ebp-0C0h]就是基地址再向下偏移0C0h,就是前面说的为本地变量留出的空间的起始地址;将这个值装载入edi寄存器,从而得到局部变量的地址
00411A12 mov ecx,30h //在ecx寄存器存储30h
00411A17 mov eax,0CCCCCCCCh
00411A1C rep stos dword ptr [edi] //初始化局部变量空间,ds:[edi]
int ntest = 255;
00411A1E mov dword ptr [ntest],0FFh //给局部变量赋值255
return 0;
00411A25 xor eax,eax
}
00411A20 pop edi //恢复所有寄存器的值
00411A21 pop esi
00411A22 pop ebx
00411A23 mov esp,ebp //恢复堆栈
00411A25 pop ebp
00411A26 ret //返回到源EIP地址
源代码:
int main()
{
int ntest = 255;
return 0;
}
{
00411A00 push ebp //在堆栈上保存EBP
00411A01 mov ebp,esp //将堆栈当前位置给EBP,以在堆栈结构中存储值时的参考点
00411A03 sub esp,0C0h //为变量分配空间
00411A09 push ebx //保存数据段值
00411A0A push esi //源地址指针
00411A0B push edi //目的地址指针
00411A0C lea edi,[ebp-0C0h] //装入有效地址,用来得到局部变量和函数参数的指针。这里[ebp-0C0h]就是基地址再向下偏移0C0h,就是前面说的为本地变量留出的空间的起始地址;将这个值装载入edi寄存器,从而得到局部变量的地址
00411A12 mov ecx,30h //在ecx寄存器存储30h
00411A17 mov eax,0CCCCCCCCh
00411A1C rep stos dword ptr [edi] //初始化局部变量空间,ds:[edi]
int ntest = 255;
00411A1E mov dword ptr [ntest],0FFh //给局部变量赋值255
return 0;
00411A25 xor eax,eax
}
00411A20 pop edi //恢复所有寄存器的值
00411A21 pop esi
00411A22 pop ebx
00411A23 mov esp,ebp //恢复堆栈
00411A25 pop ebp
00411A26 ret //返回到源EIP地址
源代码:
int main()
{
int ntest = 255;
return 0;
}