确定 PE文件被装载的地址

LeLeGhost 2003-06-20 08:21:39
看别人在确定 PE文件被装载的地址时用 PE header的 ImageBase值来确定,
查了一些 PE说明的文章。上面是这么说 ImageBase的 PE文件的优先装载地址。

那么是不是说 PE文件被装载的地址可能不是 ImageBase?
这个方法是不是可能不对?
...全文
43 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeLeGhost 2003-06-20
  • 打赏
  • 举报
回复

大家是不是说是 DLL 和 OCX的地址是很有可能不对的,而 exe 在大多数情况下是对的。

那么有么有更准确、更通用的方法?
Areslee 2003-06-20
  • 打赏
  • 举报
回复
PE文件可以装载到任何地址空间,VC中有一个选项可以指定IMAGEBASE的值,缺省址是0x400000
zbl101 2003-06-20
  • 打赏
  • 举报
回复
每个exe文件都有自己的4g空间,所以都装载在ImageBase
sxmzmxh 2003-06-20
  • 打赏
  • 举报
回复
exe一般都装载在ImageBase,因为它开辟了自己的地址空间。
其它的如dll,ocx等就要视情况而定了,如果地址被占用,就装载在别处。
sxmzmxh 2003-06-20
  • 打赏
  • 举报
回复
http://www.luocong.com/articles/show_article.asp?Article_ID=23
sxmzmxh 2003-06-20
  • 打赏
  • 举报
回复
KERNEL32.DLL地址基本是固定的,不过98。2000。xp下各有不同
LeLeGhost 2003-06-20
  • 打赏
  • 举报
回复

哇!那要调用函数。我的目的是在不调用任何库的情况下,得到宿主基地址。
再得到 KERNEL32.DLL的位置。可以用函数,那不如直接
用 GetModuleHandle("KERNEL32.DLL")
算了,还是自己算吧。实在不行就加个 SEH吧。
sxmzmxh 2003-06-20
  • 打赏
  • 举报
回复
很多方法,GetModuleHandle,
或者Toolhelp的Module32First,Module32Next,
或psapi的EnumProcessModules
LeLeGhost 2003-06-20
  • 打赏
  • 举报
回复
就是保证我在程序中能得到当前的准确装载地址。

或者能得知当前载入的地址不是 ImageBase优先地址,可以做出相应动作。
sxmzmxh 2003-06-20
  • 打赏
  • 举报
回复
什么叫 更准确、更通用的方法?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧