程序初始化,包含 SEH 保存 handler 指针的操作,展示 SEH 在内存中的基本结构。
程序的入口地址 DWORD AddressOfEntryPoint 11EB。
004011EB 55 push ebp ; ebp 存至 esp 0018FF8C 所指的位置,ESP - 4 004011EC 8BEC mov ebp,esp ; esp 存至 ebp 004011EE 6A FF push -1 ; -1 存至栈顶 esp 004011F0 68 B8604000 push CrackMe1.004060B8 ; rdata 部分,地址所指区域作用未知 004011F5 68 0C294000 push CrackMe1.0040290C ; text 部分,EXCEPTION HANDLER 004011FA 64:A1 00000000 mov eax,dword ptr fs:[0] ; fs 7EFDD000,值 0018FFC4,指向 SEH chain 尾部(值 FFFFFF),dword ptr,取指针指向的 32 位值(一般为指针) 00401200 50 push eax 00401201 64:8925 00000000 mov dword ptr fs:[0],esp ; 当前 esp 存入 fs 指向
程序开始是有 fs:[0] 指向 0018FFC4。
执行到最后,
7EFDD000 这个地址指向的是一个结构,第一个指针指向的是下一个 SEH 结构,第二个指针则指向处理函数。