Questions tagged «dynamic-loading»



2
ELF共享库-PLT的动机
可以使用自修改代码来加速动态链接库中的函数调用吗? 据我了解,ELF共享库使用一种间接跳转表(过程链接表或PLT)来实现库函数的延迟绑定。目的似乎是为了避免必须修改代码段中的表,同时仍允许在第一次调用时对函数位置进行延迟解析。 在加载时甚至可能在第一个函数调用时为该表动态创建代码会更快吗? 是否能够在进程之间尽可能多地共享代码段(动态表对于进程是私有的)?是出于安全原因(可写代码不应执行 -但是JIT始终这样做,并且加载程序可以在实际启动程序之前由加载程序添加和删​​除写许可权)? 还是这两者的结合,而每次函数调用获得的小性能提升是不值得的?

1
ELF可执行文件的哪些部分被加载到内存中,在哪里?
我已经知道的: ELF可执行文件包含许多节,显然.text和.data节已加载到内存中,因为这些是程序的主要部分。但是要使程序正常工作,它需要更多信息,尤其是在动态链接时。 我感兴趣的是.plt,.got,.dynamic,.dynsym,.dynstr等部分。ELF中负责将功能链接到地址的部分。 到目前为止,据我所知,诸如.symtab和.strtab之类的内容不会加载(或不保留)在内存中。但是链接器是否使用.dynsym和.dynstr?他们留在记忆中吗?我可以从程序代码访问它们吗? 可执行文件的任何部分都驻留在内核内存中吗? 我对此的兴趣主要是法医,但是有关此主题的任何信息都将有所帮助。我所阅读的有关这些表和动态链接的资源比较高级,它们仅说明工作原理,而与内存中的内容无关。 让我知道我的问题是否有任何不清楚之处。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.