【发布时间】:2012-05-12 22:12:28
【问题描述】:
只是为了给您一些背景信息,这就是我想要实现的目标: 我在共享对象文件中嵌入了一个 const char*,以便在 .so 文件本身中有一个版本字符串。我正在做数据分析,这个字符串让我可以让数据知道是哪个版本的软件产生的。这一切都很好。
我遇到的问题是当我尝试直接从 .so 库中读取字符串时。我尝试使用
nm libSMPselection.so | grep _version_info
得到
000000000003d968 D __SMPselection_version_info
这一切都很好并且符合预期(char* 称为_SMPselection_version_info)。 但是我希望现在能够打开文件,寻找 0x3d968 并开始读取我的字符串,但我得到的只是垃圾。
当我打开 .so 文件并简单地搜索字符串的内容(我知道它是如何开始的)时,我可以在地址 0x2e0b4 找到它。在这个地址它在那里,零终止并且如预期的那样。 (我目前正在使用这种方法。)
我不是计算机科学家。有人可以向我解释为什么 nm 显示的符号值不正确,或者不同,如果不是符号的地址,符号值是什么?
(顺便说一句,我正在使用 OSX 10.7 的 Mac)
【问题讨论】: