Просто чтобы дать вам некоторый контекст, вот чего я пытаюсь достичь :Я встраиваю const char *в общий объектный файл, чтобы иметь строку версии в самом файле.so. Я занимаюсь анализом данных, и эта строка позволяет мне сообщить данным, какая версия программного обеспечения их произвела. Это все работает нормально.
У меня возникает проблема, когда я пытаюсь напрямую прочитать строку из библиотеки.so. Я попытался использовать
nm libSMPselection.so | grep _version_info
и получить
000000000003d968 D __SMPselection_version_info
, все в порядке, и, как и ожидалось, (символ *называется _SMPselection _версия _информация ). Однако я ожидал, что теперь смогу открыть файл, найти 0x3d968 и начать читать мою строку, но все, что я получаю, это мусор.
Когда я открываю файл.so и просто ищу содержимое строки (Я знаю, как она начинается ), я могу найти ее по адресу 0x2e0b4. По этому адресу он есть, нулевой завершен и, как и ожидалось. (Сейчас я использую этот метод.)
Я не компьютерщик. Может кто-нибудь объяснить мне, почему значение символа, отображаемое nm, неверно,или, иначе, каково значение символа, если это не адрес символа?
(Кстати, я работаю на Mac с OSX 10.7)