Win32 x86 Prolog 反汇编

逆向工程 拆卸 视窗 调试 风袋 线
2021-06-19 13:51:10

我有以下带有注释的函数序言的反汇编。我不清楚作者在这行反汇编"lea edi,[ebp-0xcc] ; 获取堆栈帧的最低地址" 中的意思转储可执行文件的标头 我在 OPTIONAL HEADER VALUES 中看到以下内容:100000 堆栈保留大小 1000。Windows线程默认堆栈大小为 1MB,因此我相信 dumpbin 中的值以 Kilo 为单位。

你能澄清一下这个说法吗: lea edi,[ebp-0xcc] ; 获取栈帧的最低地址

push ebp            ; establishing stack frame 
mov ebp,esp         ; save stack pointer in ebp
sub esp,0xcc        ; creating stack frame for local variables
push ebx            ; saving registers that might be used
push esi            ; outside
push edi            ;                                     
lea edi,[ebp-0xcc]  ; getting the lowest address of stack frame 
mov ecx,0x33        ; filling stack frame with 0xCC
mov eax,0xcccccccc  ; 
rep stosd           ;
1个回答

这与 pe 标头中的堆栈大小没有任何关系

assume  esp = 1200cc 
so ebp will also be 1200cc
sub esp,0xcc  will make esp 120000   
the three pushes will alter esp but not ebp   
so  edi will be 120000   after that operation   
ecx = counter == 33  eax = 0xcccccccc 
so rep stosd will fill the space from 120000 to 1200cc with 0xcccccccc

简单地说就是 memset(&ebp,0xcc,0xcc);