C++-动态链接库DLL

C++-动态链接库DLL

泛泛之交 发布于 2017-06-12 字数 75 浏览 1249 回复 3

想弄清楚VC 动态链接库DLL 地址加载的过程 以及详细实现时 的内存走向

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

灵芸 2017-10-13 3 楼

你指的静态链接,还是动态链接,两种方式不太一样
1.加载的过程
DLL的加载过程是由(PEB)进程环境块决定的,PEB中专门有一字段就是存放加载顺序及DLL加载后的初始化工作的(也就是DLLMian等函数的调用)。
2.如何加载
加载过程中,EXE会有一个起始的镜像地址(这个在vc6前静态链接是需要明确指定的),然后通过这个起始的地址进行重定位(就是计算出实际装入地址与DLL中的绝对地址的位移,然后调整每个重定位块的位置),并把重定位后的指针,保存起来。

虐人心 2017-07-29 2 楼

参考一下这两篇文章吧,大牛写的。DLL到进程地址空间的映射 Dll 一些运行机制

归属感 2017-07-26 1 楼

你可以看下LoadLibraryExW的实现,网上可以下载到windows 2k和windows nt的源码。里面的完整的实现代码。