熟悉栈的数据结构
- esp和ebp构成了正在使用的栈,eip则指的是当前正在执行的命令的位置。
00A418D0 push ebp
00A418D1 mov ebp,esp
00A418D3 sub esp,0E4h
00A418D9 push ebx
00A418DA push esi
00A418DB push edi
00A418DC lea edi,[ebp-0E4h]
00A418E2 mov ecx,39h
00A418E7 mov eax,0CCCCCCCCh
00A418EC rep stos dword ptr es:[edi]
00A418EE mov ecx,offset _3DE4B0FD_ConsoleApplication3@cpp (0A4E026h)
00A418F3 call @__CheckForDebuggerJustMyCode@4 (0A41271h)
其中比较基本的几点有:
00A418D1 mov ebp,esp
将esp的值传递到ebp中,此时栈顶和栈底指向同一个地址。00A418D3 sub esp,0E4h
此时eip指向了00A418D3
然后执行地址中对应的命令:sub esp,0E4h
将esp的地址加上0E4h这么多,也就是说此时正在运行的栈空间有0E4h这么大。00A418F3 call @__CheckForDebuggerJustMyCode@4 (0A41271