【发布时间】:2015-04-24 19:38:16
【问题描述】:
我知道动态链接器使用mmap() 来加载库。我猜是内核将可执行文件及其.interpreter 加载到同一个地址空间,但它如何确定在哪里?我注意到ld.so 在禁用 ASLR 的情况下的加载地址是0x555555554000(在 x86_64 上)——这个地址来自哪里?我尝试遵循do_execve() 的代码路径,但它对我来说太过分了,不会被搞得一团糟。
【问题讨论】:
-
从头开始想象,似乎地址必须由内核选择或编码在文件中。您在内核中寻找证据,您是否尝试过在文件中查找?
-
@ChrisStratton 我剖析了可执行文件和动态链接器——没有任何东西看起来像这个地址。
-
你为什么要问?你为什么在乎?请编辑您的问题以激发它?您是否正在编写新的动态链接器?
标签: linux linux-kernel x86-64 elf dynamic-linking