只是为了给您一些上下文,这就是我想要实现的目标:我将 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 上工作)