首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-04-03 
问一个关于win32汇编的问题(罗云彬版)在17.6章第一个例子中,他有一个例子是查找kernel32.dll基地址的子函

问一个关于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对齐计算的。这个作者只是搞了个小技巧

热点排行