|
_TEXT SEGMENT
_wmain PROC
push ebp ; 保存旧的ebp
mov ebp, esp ; ebp保存当前栈的位置
push -1 ; 建立SEH(Structured Exception Handler)链
; -1表示表头,没有Prev
push __ehhandler$_wmain ; SEH异常处理程序的地址
mov eax, DWORD PTR fs:0 ; fs:0指向TEB的内容,头4个字节是当前SEH链的地址
push eax ; 保存起来
sub esp, d8H ; 分配d8H字节的空间
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-e4H] ; 确定局部变量的起始地址。e4H = d8H + 4 * 3,跳过之前建立SEH链所用的3个Push指令所占用的栈的空间,以及sub esp, d8h为局部变量分配的d8H字节空间
mov ecx, 36H ; 36H*4H=d8H,也就是用36H个ccccccccH填满刚才分配的d8H字节空间
mov eax, ccccccccH
rep stosd
mov eax, DWORD PTR ___security_cookie
xor eax, ebp
push eax ; ebp ^ __security_cookie压栈保存
lea eax, DWORD PTR [ebp-0cH] ; ebp-0cH是之前main的起始代码中在堆栈中建立的SEH结构的首地址
mov DWORD PTR fs:0, eax ; 设置到TEB中作为当前Active的SEH链表末尾
|