+ -
当前位置:首页 → 问答吧 → 关于DLL地址(基础)

关于DLL地址(基础)

时间:2011-01-30

来源:互联网


这是老罗书上说的,当两个DLL默认安装地址相同时,有一个会定位到其它地方,这就说DLL的地址不是固定不变的吧
可是网上说kernel32.dll这个在不同的程序的装载地址是一样的,这又是为什么呢?kernel32.dll特殊?
还是上面那段话所指的DLL指的是用户DLL?

作者: yg29hxj   发布时间: 2011-01-30

LZ发过这个贴子了吧,其实这个问题也简单,
首先LZ没有kernel32.dll的源代码,那么就不能人为修改kernel32.dll的装载地址,
然后看看WINDOWS装载器的装载顺序,一般先是ntdll.dll,然后是WINDOWS内核的3个文件,
kernel32.dll,user32.dll,gdi32.dll,
所以就算LZ强行修改用户DLL的装载地址与kernel32.dll的地址相同,
除非LZ有WINDOWS装载器的源代码,强行让LZ的用户DLL先于kernel32.dll装载,
否则很难抢占kernel32.dll的装载位置

作者: renxu350   发布时间: 2011-01-30

windows核心部分的一些DLLs是静态装载的,就是windows启动的时候加载,在windows运行其间是卸不掉的,这些DLLs映射到各个进程的地址空间的相同位置。

作者: DelphiGuy   发布时间: 2011-01-30