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
实在不明白这样的指令有什么用。