首页
社区
课程
招聘
[旧帖] [求助]请教下,关于低于基址内存的来源 0.00雪花
2009-6-14 16:38 3837

[旧帖] [求助]请教下,关于低于基址内存的来源 0.00雪花

2009-6-14 16:38
3837
比如,我用ollydbg载入notepad.exe(未运行)
Alt+M打开内存映射窗
从Pe文件头往上,有一堆内存映射.

想请问一下这些内存块是从pe文件哪里映射出来的?
还是pe文件加载器,自己分配的?
但为何不同的pe文件分配的地址和大小都不一样呢?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
打赏
分享
最新回复 (8)
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
jackozoo 14 2009-6-14 17:16
2
0
去看下Jeffrey的Windows核心编程吧
MM那章讲的一清二楚~
雪    币: 229
活跃值: (458)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
hatling 3 2009-6-14 17:25
3
0
呵呵..看到最多的就是ls这样的回答...
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
circleyl 2009-6-14 17:50
4
0
刚看了一遍,没发现我问题的答案啊.

原文摘录如下:
当线程调用C r e a t e P r o c e s s时,系统将执行下列操作步骤:

1) 系统找出在调用C r e a t e P r o c e s s时设定的. e x e文件。如果找不到这个. e x e文件,进程将无法创建,C r e a t e P r o c e s s将返回FA L S E。

2) 系统创建一个新进程内核对象。

3) 系统为这个新进程创建一个私有地址空间。

4) 系统保留一个足够大的地址空间区域,用于存放该. e x e文件。该区域需要的位置在. e x e文件本身中设定。按照默认设置, . e x e文件的基地址是0 x 0 0 4 0 0 0 0 0(这个地址可能不同于在6 4位Windows 2000上运行的6 4位应用程序的地址),但是,可以在创建应用程序的. e x e文件时重载这个地址,方法是在链接应用程序时使用链接程序的/ B A S E选项。

5) 系统注意到支持已保留区域的物理存储器是在磁盘上的. e x e文件中,而不是在系统的页文件中。

当. e x e文件被映射到进程的地址空间中之后,系统将访问. e x e文件的一个部分,该部分列出了包含. e x e文件中的代码要调用的函数的D L L文件。然后,系统为每个D L L文件调用L o a d L i b r a r y函数,如果任何一个D L L需要更多的D L L,那么系统将调用L o a d L i b r a r y函数,以便加载这些D L L。每当调用L o a d L i b r a r y来加载一个D L L时,系统将执行下列操作步骤,它们均类似上面的第4和第5个步骤:


如果高于基址的节,在pe文件中都有rva定义.这样pe加载器,可以正确的映射到正确的位置.
而低于基址的节,肯定不会有rva的,因为rva不可能为负.这样的话,这些内存从哪来的呢?
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zlciai 2009-6-14 19:16
5
0
首先是系统为程序创建私有地址空间,再把pe文件映射到这片虚拟内存,微软默认的加载地址是00400000,这个地址在编译时是可以更改的(ImageBase选项),在PE文件头中也可以找到.也有用00100000.
想想汇编中的ORG  就是一个开始的设置.
至于低位地址放了些什么,不用关心的.
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zlciai 2009-6-14 19:20
6
0
那些只是虚拟的地址,正是有了基址BASE的定义才会用RVA进行操作.
基址就是映射文件的开始,低于基址的地方再用RVA是没有意义的,RVA只能用在指定的模块内
雪    币: 1450
活跃值: (35)
能力值: (RANK:680 )
在线值:
发帖
回帖
粉丝
jackozoo 14 2009-6-14 19:45
7
0
我说的是MM那章.
MM: Memory Management, 内存管理
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
circleyl 2009-6-15 17:57
8
0
但是在ollydbg中alt+M中,可以看到确实分配了这些内存,而且你如果手动释放后,程序一跑就出错.所以这些数据肯定是有用的.问题是这些数据有什么作用,由何而来
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
circleyl 2009-6-15 17:58
9
0
那整个内存管理部份(这其实是一部份,分为很多章)我又重新读了一遍,但没找到答案.请告知具体是哪一章,章的名称.先谢谢
游客
登录 | 注册 方可回帖
返回