VC++中delete函数第一行的"mov edi,edi”是做什么的?

snnn 2012-05-07 16:53

下面这段代码来自于vc 2010的crt。就是标准库中delete操作符的实现。

void __cdecl operator delete(void* p)
{
78523C70  mov         edi,edi
78523C72  push        ebp
78523C73  mov         ebp,esp
#if !defined(_AFX_NO_DEBUG_CRT) && defined(_DEBUG)
        _free_dbg(p, _NORMAL_BLOCK);
78523C75  push        1
78523C77  mov         eax,dword ptr [p]
78523C7A  push        eax
78523C7B  call        dword ptr [__imp___free_dbg (783D1844h)]
78523C81  add         esp,8
#else
        free(p);
#endif
}
78523C84  pop         ebp
78523C85  ret  

很奇怪的是,这个函数并不是以

push ebp

mov ebp,esp

开始的。在这两行指令之前,有一句

mov edi,edi

实在不明白这样的指令有什么用。

[返回] [原文链接]