mov edi,[esp]
and edi,0ffff0000h /这是对齐页起始地址
.while TRUE
.if word ptr [edi] == IMAGE_DOS_SIGNATURE
mov esi,edi
add esi,[esi+003ch]
.if word ptr [esi] == IMAGE_NT_SIGNATURE
mov @dwReturn,edi
.break
.endif
.endif
sub edi,010000h
.break .if edi < 070000000h
.endw
我想问下,为什么是 and edi,0ffff0000h,我知道一页好像是4K,那么页的起始地址应该是0fffff000。我感觉它这里的一页好像是64k。
其次就是,.break .if edi <070000000h 这句有什么用?据我所知DLL文件的优先装入地址是010000000h 那么很可能一开始edi就小于070000000h了。