社区
进程/线程/DLL
帖子详情
当dll被不同的进程加载时。。。
yoci
2000-06-22 05:39:00
有个问题一直不懂:dll被不同的进程加载时,它在各进程中的逻辑地址是不是相同的?
如果是相同的,那怎么保证这个地址不被别的dll给占用呢?难道要预留出来?比如mfc42.dll是固定加载在每个进程地址的0x5f400000处。
如果是不同的,那么dll的代码被不同的进程加载到不同的页面(应该是这样的吧?),当共享的代码运行到页与页的交界处,它怎么该往什么跳转?
...全文
284
4
打赏
收藏
当dll被不同的进程加载时。。。
有个问题一直不懂:dll被不同的进程加载时,它在各进程中的逻辑地址是不是相同的? 如果是相同的,那怎么保证这个地址不被别的dll给占用呢?难道要预留出来?比如mfc42.dll是固定加载在每个进程地址的0x5f400000处。 如果是不同的,那么dll的代码被不同的进程加载到不同的页面(应该是这样的吧?),当共享的代码运行到页与页的交界处,它怎么该往什么跳转?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yoci
2000-06-24
打赏
举报
回复
1
虽然我没看懂,但还是十分感激你的回答。
谢谢指点。
jy
2000-06-22
打赏
举报
回复
首先,定位的基址并不是绝对固定的。这取决于具体的一个进程的内存的使用情况,操作系统能够依据具体情况而调整一个DLL的映射地址,又叫做基址的重定位(rebase)。当调试一个程序时,你可以看到调试信息中的Load和Rebase DLL的信息输出。
常见的动态库,我特别指那些由系统安装自带的或者特定硬件子系统的用到的DLL,由MS以一种预定义的方式约定了加载基址,目的是避免花费额外的系统开销,每次重定位过程实际上是一种运行时连接(LINK)技术。所以,作为M$的推荐,用户的DLL基址通常从0x10000000开始。
关于后一个说法,你的概念极其不明晰。只能讲成是:DLL的代码被不同的进程加载到不同的逻辑地址处。并且,绝大多数情况下我们可以说成是:加载到同一逻辑地址处。进程完全不知道这些代码会被分布在那一或者几段物理页面上。对于一个进程而言,它所得到的始终是一个4GB的连续寻址的地址空间,即逻辑地址。
从Windows来说,一个DLL的代码被加载到一个内存映射文件中。
至于页与页的交界处的问题,属于操作系统的问题,并结合硬件机制予以完成。草草地说,CPU支持被操作系统所操纵的一种从逻辑地址到物理地址之间的转换算法,这样,当运行到页边界时,CPU能够发出一个缺页失败,这也是能由OS所能截获的异常(Exception),这时,OS的中心任务是找出下一页代码在文件系统中的位置,并加载它到内存中,映射,继续执行。
所以,共享的代码是不知道下一步该往哪里跳转的。
OK,可怜我的手!
yoci
2000-06-22
打赏
举报
回复
不好意思,最后一句写错了
应该是:
当共享的代码运行到页与页的交界处,它怎么知道该往什么页跳转?
leslielu
2000-06-22
打赏
举报
回复
我也想知道
DLL
木马
进程
内幕大揭密
DLL
木马
进程
,很不错的一本书
dll
加载
卸载工具源码
远程注入方式实现LoadLibrary,FreeLibrary 附带遍历
进程
和模块
dll
功能。svchost等的系统
进程
不能遍历,没做处理。 用了破解的皮肤组件,360之类的软件可能会唧唧歪歪,不喜欢的可以自行修改代码和删除相关皮肤文件的调用。
Windows
进程
常用
DLL
模块注入技术
课程结合多种Windows
进程
常用
DLL
注入技术。远程线程注入APC注入,异步调用过程,向目标线程插入待执行任务从而完成注入。窗口消息注入,指定窗口
进程
注入,与全局钩子注入类似。环境块注入,获取
进程
上下文信息,直接性修改程序执行流程完成注入。
进程
入口点注入,在程序初始化的
时
机前将
dll
模块文件注入至目标主线程。
进程
调试级注入,涉及调试器相关功能调用知识点
dll
模块重定位内存注入,模拟操作系统
加载
PE文件方式,直接将
dll
文件内存数据写入目标
进程
并执行。导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入表、增加导出函数,修复表项数据等。内核驱动级
Dll
模块注入技术,内核驱动入门扩展。
DLL
动态库多次
加载
问题
原因涉及
DLL
加载
和运行机制,主要有两点:1)
DLL
动态链接库无法独立运行,必须由一个应用程序
进程
加载
到
进程
空间后才能使用。
加载
DLL
的
进程
称为宿主
进程
。被
加载
的
DLL
属于宿主
进程
,不属于宿主
进程
内某个线程。2)宿主
进程
可以重复调用,甚至重复
加载
DLL
。第1次调用
DLL
或第1次
加载
DLL
时
,宿主
进程
将
DLL
引入
进程
空间。一旦宿主
进程
成功
加载
DLL
,随后的重复调用或重复
加载
只会增加“引用计...
DLL
入门浅析 - 多
进程
加载
DLL
内存模型
DLL
入门浅析(5)——使用
DLL
在
进程
间共享数据 在Win16环境中,
DLL
的全局数据对每个载入它的
进程
来说都是相同的,因为所有的
进程
用的都收同一块地址空间;而在Win32环境中,情况却发生了变化,每个
进程
都有了它自己的地址空间,
DLL
函数中的代码所创建的任何对象(包括变量)都归调用它的
进程
所有。当
进程
在载入
DLL
时
,操作系统自动把
DLL
地址映射到该
进程
的私有空间,也就是
进程/线程/DLL
15,471
社区成员
49,182
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章