首页
社区
课程
招聘
[旧帖] [求助]DLL被不同进程加载后,它的IAT输入表是否是同一份 0.00雪花
发表于: 2012-3-22 14:46 1596

[旧帖] [求助]DLL被不同进程加载后,它的IAT输入表是否是同一份 0.00雪花

2012-3-22 14:46
1596
不同进程加载同一个DLL,
DLL的输入表是否每个进程都有一份,还是共享一份IAT

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你说的是进程的输入表吧。DLL的输入表引入的是其它的DLL。
2012-3-22 15:50
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我说的是不同进程加载同一个DLL的时候,
这个DLL的输入表只有一份,还是多份

是DLL的输入表,不是进程的输入表

多个进程1.exe 2.exe 3.exe 加载同一个my.dll
windows把my.dll加载到内存后,my.dll的IAT输入表只有一份,
还是 不同EXE都有一份自己的my.dll的 IAT输入表的拷贝
2012-3-22 16:13
0
雪    币: 297
活跃值: (235)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
4
dll呗加载到物理内存再映射到不同进程的地址空间
应该是一样的吧
2012-3-22 16:59
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我刚在XP下测试,DLL的IAT在多个进程加载后,会产生多个拷贝,不是同一个
不知其它版本的WINDOWS是否一样。。。
具体分析,求指点
2012-3-22 17:38
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
6
LZ 不知道是否了解 COPY ON WRITE 机制?这些东西在windows核心编程里都有。。。。。。。
2012-3-22 19:44
0
雪    币: 83
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不是同一份吧。不同进程的主dll所依赖的若干子dll在内存中只有一份物理实体,一份子dll物理实体通过映射到不同进程地址空间来进行加载,其base就不同了。
如进程A加载主DLL: kenel32.dll .  进程B加载主DLL:kenel32.dll
而kenel32.dll依赖并加载nt.dll kenelbase.dll等
A  B两进程的nt.dll  kenelbase.dll   kenel32.dll在内存中只有一份物理实体,但nt.dll  kenelbase.dll   映射进A B 进程时base就不同了,其导出给不同进程中kenel32.dll的函数地址就不同了,那么A  B进程中各自的kenel32.dll中的IAT就不同了吧
纯粹个人理解
2012-3-22 19:56
0
雪    币: 113
活跃值: (100)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
PE文件通常使用内存映射的方式在使用,copy on write是个基本的原则。对于DLL来说,一份DLL可能被多个进程使用,绝大多数情况下该DLL都是共享的,除非有需要修改的地方,比如说某个进程加载DLL的时候发生了地址冲突,那么进程把DLL加载到了不同于它的预先定义的首地址的地方。DLL的IAT部分也是如此,可以共享,如果被修改了就成为了独立的一份。
2012-3-25 10:49
0
游客
登录 | 注册 方可回帖
返回
//