首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成地图文件,它显示可执行文件中各个组件的内存范围。

生成地图文件,它显示可执行文件中各个组件的内存范围。
EN

Stack Overflow用户
提问于 2017-05-15 06:26:01
回答 2查看 964关注 0票数 0

我正在链接多个.so文件,同时在linux环境中生成一个可执行文件。现在我想要的是内存映射,它显示可执行文件中链接的单个.so文件的内存范围,如下所示

代码语言:javascript
复制
0x12345678 - 0x12345800  -> lib1.so
0x12345800 - 0x12345A0C  -> lib2.so
0x12345A0C - 0x12346A00  -> lib3.so

为了生成地图文件,我用"-Wl,-Map=output.map“将参数传递给gcc链接器,但是生成的地图文件不显示这种格式的信息。

是否可以为这样的.so文件生成映射文件?如果是,那么有人能建议如何生成包含这样信息的地图文件吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-16 04:40:32

是否可以为这样的.so文件生成映射文件?

可以在运行时从流程中生成这样的映射,例如通过检查/proc/self/maps,或者遵循运行时加载器_r_debug->r_map链接列表。

正如tofro的答案正确指出的那样,在静态链接时生成这样一个映射是不可能的,因为在二进制文件开始运行之前,共享库的加载地址是不知道的。

票数 0
EN

Stack Overflow用户

发布于 2017-05-15 06:47:21

.so文件在运行时被动态链接--它们的加载地址在链接时不知道,因此不能生成像您希望的那样的映射文件。

如果您想要在链接时知道一个静态映射,您需要链接到静态库,或者只需要接受一个事实,即在运行时由操作系统决定.so库的加载位置。

ldd将向您展示在加载时需要解析哪些外部引用--但它显然不能告诉您地址。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43972723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档