检查静态链接的可执行文件中的文本段

时间:2013-02-28 22:26:09

标签: linux ld elf

我有一个静态链接的应用程序二进制文件,它链接多个用户库和pthread库。应用程序仅使用每个库中的一组有限功能。从之前的帖子Size of a library and the executable和我的实验中我发现链接器只包含使用/需要的函数(在可执行文件中)而不是库的全部内容。

我想知道每个库中的哪些函数是链接的 到可执行文件及其地址(VMA)。最后,我想根据映射到文本段的函数(在库中)编译包含每个库的开始和结束虚拟内存地址(VMA)的列表。

执行此操作的一种方法是在库中创建函数列表,然后在可执行文件中查找每个函数以及映射到的相应虚拟内存地址。但这对我来说似乎相当乏味。有没有更简单的方法来实现这一目标?感谢。

1 个答案:

答案 0 :(得分:0)

  

我想知道每个库中哪些函数链接到可执行文件及其地址(VMA)。

-Wl,-Map=foo.map参数添加到您的链接行。生成的foo.map文件将告诉您以上所有内容。

  

最终我想编译一个包含每个库的开始和结束虚拟内存地址(VMA)的列表

假设链接器不重新排序函数(因此单个库中的所有函数都占用连续的文本地址范围)。在简单的情况下,这种假设可能是正确的,但绝不保证。参见例如这patch