我有一个静态链接的应用程序二进制文件链接到多个用户库和pthread库。 应用程序仅使用这些库中的每一个的有限function集。 从以前的文章大小的库和可执行文件和从我的实验我意识到,链接器只包括function(在可执行文件中)使用/需要,而不是库的全部内容。
我想知道每个库中的哪些函数链接到可执行文件和它们的地址(VMA)。 最终,我想根据映射到文本段的函数(在库中)编译包含每个库的开始和结束虚拟内存地址(VMA)的列表。
一种方法是制作库中的函数列表,然后查找可执行文件中的每个函数以及映射到的相应虚拟内存地址。 但是这对我来说似乎很乏味。 有一个更简单的方法来完成这个吗? 谢谢。
反汇编为Intel语法的x86 ELF反汇编程序
强制二进制文件使用共享库(.so)的特定(较新)版本
在section header elf文件中获取sh_name成员
读取ELF部分的内容(以编程方式)
.got和.got.plt部分有什么区别?
代码注入 – Solaris和linux
如何修改一个ELF文件,改变文件的部分数据长度?
链接器如何确定.rodata节中某些数据的地址?
预链接仅对相对重定位有影响
如何覆盖在linux下elf可执行文件的.interp标头中指定的链接器?
我想知道每个库中的哪些函数链接到可执行文件和它们的地址(VMA)。
将-Wl,-Map=foo.map参数添加到您的链接行中。 由此产生的foo.map文件将告诉你所有的上述。
最终,我想编译一个包含每个库的开始和结束虚拟内存地址(VMA)的列表
假定链接器不重新排序函数(因此单个库中的所有函数都占用连续范围的文本地址)。 这种假设在简单情况下可能是正确的,但绝不能保证。 见例如这个补丁 。
总结以上是内存溢出为你收集整理的检查静态链接的可执行文件中的文本段全部内容,希望文章能够帮你解决检查静态链接的可执行文件中的文本段所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)