1

我有一个静态链接的应用程序二进制文件,它链接到多个用户库和 pthread 库。该应用程序仅使用这些库中的一组有限的函数。从上一篇文章库和可执行文件的大小以及我的实验中,我意识到链接器仅包含使用/需要的函数(在可执行文件中),而不是库的全部内容。

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

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

4

1 回答 1

0

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

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

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

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

于 2013-03-02T16:30:25.543 回答