当前位置: 代码迷 >> 汇编语言 >> 问一个关于win32汇编的有关问题(罗云彬版)
  详细解决方案

问一个关于win32汇编的有关问题(罗云彬版)

热度:3999   发布时间:2013-02-26 00:00:00.0
问一个关于win32汇编的问题(罗云彬版)
在17.6章第一个例子中,
他有一个例子是查找kernel32.dll基地址的子函数如下:
mov edi,_dwKernelRet
and edi,0ffff0000h (他说这里 是为了对齐64k,说pe加载就是64k对齐的,不是按照内存页4k对齐的么?而且为什么这么操作就能对齐?)
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
  _pageerror:
  sub edi,01000h(这里为什么这样减?)
  break if edi<070000000h (这里又是什么原因?)

------解决方案--------------------------------------------------------
这个不是内存分页4k的问题,而是kernel.dll加载地址必定不会小于这个值的原因。
查找其他的模块首地址必须用4k对齐计算的。这个作者只是搞了个小技巧
  相关解决方案