-
-
[求助]一段C代码反汇编的疑惑
-
发表于:
2010-5-5 11:16
4665
-
小弟跟踪了一段C语言的反汇编代码,存在以下疑惑,希望知道的解释下。
void mynew(int* pp)
{
00411C60 push ebp
00411C61 mov ebp,esp
// 没明白这中间的几段代码的含义
00411C63 sub esp,0C0h
00411C69 push ebx
00411C6A push esi
00411C6B push edi
00411C6C lea edi,[ebp-0C0h]
00411C72 mov ecx,30h
00411C77 mov eax,0CCCCCCCCh
00411C7C rep stos dword ptr [edi]
// 到这里
pp = NULL;
00411C7E mov dword ptr [pp],0
}
稍作改动,栈空间的分配大小又发生了变化
void mynew(int* pp)
{
00411C60 push ebp
00411C61 mov ebp,esp
// 大小也变化了
00411C63 sub esp,0CCh
00411C69 push ebx
00411C6A push esi
00411C6B push edi
00411C6C lea edi,[ebp-0CCh]
00411C72 mov ecx,33h
00411C77 mov eax,0CCCCCCCCh
00411C7C rep stos dword ptr [edi]
// 到这里
pp = new int;
00411C7E push 4
00411C80 call operator new (411555h)
00411C85 add esp,4
00411C88 mov dword ptr [ebp-0C8h],eax
00411C8E mov eax,dword ptr [ebp-0C8h]
00411C94 mov dword ptr [pp],eax
}
这段代码我主要想搞清楚传值和传址的区分的,我没想明白为什么lea后就能达到传址的效果,底层的原理是什么?我可能问过头了
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课