首页
社区
课程
招聘
[求助]概念性问题,PE文件在内存中的存在方式?
发表于: 2009-11-26 14:00 8864

[求助]概念性问题,PE文件在内存中的存在方式?

2009-11-26 14:00
8864
收藏
免费 0
支持
分享
最新回复 (35)
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
回23楼,程序加载DLL肯定是COPY。

引用:“但是不管是连接还是COPY对破解应该都没有用吧,因为再次启动程序后,系统会重新加载这个DLL啊。”
再次启动程序后还是不会让你破解的:
(1)类似壳的思想:在执行程序前有一段壳代码,这个壳再次修改该加载到内存的该DLL副本。
(2)类似病毒的思想:系统重新加载的DLL本身就被篡改了,“DLL原版”——位于系统盘的源文件中病毒了。
2009-11-26 16:23
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
如果像他说的那样,每个程序都COPY一份,那不还就相当于在每个EXE文件中加入了一份么。只是文件在关了之后把他释放了而已。。。这样的话,他也不节省内存,而是节省硬盘啊。。

回15楼,dll节省内存体现在“动态加载”这四个字上,需要的时候才加载来,不需要时候才卸载掉,这难道不比每时每刻都存在内存里 要节省吗?
2009-11-26 16:27
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
回25楼,我支持你的观点啊。我中间说错了一点:DLL加载机制是节约磁盘的。最后想想发现跟节约磁盘无关。故:对你所说的节约内存的观点完全同意(还是自己大学知识没学好啊),而对你的其他观点完全同意。这个你仔细看我的回复。

作为补充,我认为你所说的  一直存在内存中的DLL源本,这个说法不太好。应该是保存在硬盘上系统分区中的DLL源本。
2009-11-26 16:27
0
雪    币: 444
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
29
刚看了27楼,晕了,原来是这样节约内存啊,肯定正确。

PS:我想多了。。。。
2009-11-26 16:29
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
30
回26楼
呵呵,学习了。。
下班了。。88
明天再看你们的讨论。。。
2009-11-26 16:32
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
29楼终于能和我的观点一致了,如果我的观点有错误,还请大家指正。学了4年计算机,编了这么久的程序,如果还搞不清概念性问题,是很难提高自己水平了。。
2009-11-26 16:35
0
雪    币: 183
活跃值: (36)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
32
请教:4GB没有被加载的部分是存在硬盘上吗?是指虚拟内存吗?
2009-11-26 19:51
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
回楼上 当PE文件被加载到内存后,PE加载器会为进程分配一个4GB的虚拟地址空间(注意:是虚拟),然后把程序所占用的磁盘空间作为虚拟内存映射到这个4GB的虚拟空间里,哪部分被映射进内存是由PE加载器遍历PE文件而决定的。 不过我15楼的确写错了,我去修改下
2009-11-26 21:01
0
雪    币: 254
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
我意思是说,后来的进程例如也用到那个dll.例如要加载在0X70000000处,而前面一个进程加载在0X60000000处

那系统也只是通过页目录和页表的修改,让这个0X70000000对应的物理地址和前面一个进程0X60000000对应的物理地址是同一块
2009-11-26 21:43
0
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
35
我理解错了,楼上观点完全正确
2009-11-27 10:32
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
36
哈哈,不受影响。。。只是几个内存副本。。
2009-11-27 11:10
0
游客
登录 | 注册 方可回帖
返回
//