- 主题:关于动态库加载的一些疑问
【 在 wjhtingerx 的大作中提到: 】
: 动态库的代码都是位置无关的吗?
是的
: 是什么程序负责加载动态库(mmap)的,内核还是应用加载器?
你对加载的准确定义?
: 应用程序怎么知道动态库的地址的?这个地址是连接是确定,还是加载时确定?
一般情况下应用程序是通过函数调用 foo@PLT 这样的方式来使用动态库的
linker的时候不可能知道地址的
只有运行时动态库装入内存之后被调用的函数地址才能确定,这时loader才能把真正的地址填入到PLT中
: ...................
--
FROM 104.133.8.*
【 在 wjhtingerx 的大作中提到: 】
: 谢谢。
: 动态库,.so文件不是通过mmap映射到某个内存中的吗,我是问这个过程是loader在应用中调用mmap做,还是内核直接做了。
把文件映射到内存中当然是要内核做了
: 你的意思,foo@PLT这个PLT是TEXT代码段的一部分,动态库地址映射好后,loader再去修改每个PLT地址?
loader的作用不就是计算各种地址,填写各种表吗
你以为loader是干什么的?
: ...................
--
FROM 104.133.8.*
【 在 wjhtingerx 的大作中提到: 】
: 但是有些系统出于安全的考虑,TXT内存区是设为只读的,这种怎么搞的?
把plt放数据段,函数调用的时候先把地址读到寄存器中再跳过去
: 另外,loader功能是包含在在exec这类函数里面,还是单独的应用程序?
一般是单独的把
--
FROM 104.133.8.*