|
20鱼币
本帖最后由 wow7jiao 于 2018-6-24 11:06 编辑
下面是翻遍,我尝试逐条翻译,有错误请前辈指点
int main(void)
{
010BF840 push ebp //备份堆栈指针入堆栈
010BF841 mov ebp,esp //堆栈指针复制给备份堆栈指针
010BF843 sub esp,0D8h //为函数申请一段空间
010BF849 push ebx //
010BF84A push esi //
010BF84B push edi //寄存器压栈,保留现场
010BF84C lea edi,[ebp+FFFFFF28h] //这是减负数吗,然后把值给edi
010BF852 mov ecx,36h //计数器54
010BF857 mov eax,0CCCCCCCCh //这里是int3吗?不用设置cs ip吗?
010BF85C rep stos dword ptr es:[edi] //rep指令的目的是重复其上面的指令.ECX的值是重复的次数.。。STOS指令的作用是将eax中的值(eax=0CCCCCCCCh,这里拷贝54次eax有什么用?)拷贝到ES:EDI指向的地址.edi会同步减小。
int a = 100;
010BF85E mov dword ptr [ebp-8],64h //这里是把100放进堆栈
int *p = &a;
010BF865 lea eax,[ebp-8] //把备份指针的偏移值给eax
010BF868 mov dword ptr [ebp-14h],eax //把偏移值在放进向上20字节堆栈空间?
printf("%d\n", *p);
010BF86B mov eax,dword ptr [ebp-14h]
010BF86E mov ecx,dword ptr [eax]
010BF870 push ecx
010BF871 push 1153E50h
010BF876 call 010BBD9B //段间转移,pushcs,puship,去010BBD9B地址。
010BF87B add esp,8
return 0;
010BF87E xor eax,eax //异或,eax清0
}
- #include <stdio.h>
- int main(void)
- {
- int a = 100;
- int *p = &a;
- printf("%d\n", *p);
- return 0;
- }
复制代码
|
|