Смещение в символьном значении нм?

Просто чтобы дать вам некоторый контекст, вот чего я пытаюсь достичь :Я встраиваю const char *в общий объектный файл, чтобы иметь строку версии в самом файле.so. Я занимаюсь анализом данных, и эта строка позволяет мне сообщить данным, какая версия программного обеспечения их произвела. Это все работает нормально.

У меня возникает проблема, когда я пытаюсь напрямую прочитать строку из библиотеки.so. Я попытался использовать

nm libSMPselection.so | grep _version_info

и получить

000000000003d968 D __SMPselection_version_info

, все в порядке, и, как и ожидалось, (символ *называется _SMPselection _версия _информация ). Однако я ожидал, что теперь смогу открыть файл, найти 0x3d968 и начать читать мою строку, но все, что я получаю, это мусор.

Когда я открываю файл.so и просто ищу содержимое строки (Я знаю, как она начинается ), я могу найти ее по адресу 0x2e0b4. По этому адресу он есть, нулевой завершен и, как и ожидалось. (Сейчас я использую этот метод.)

Я не компьютерщик. Может кто-нибудь объяснить мне, почему значение символа, отображаемое nm, неверно,или, иначе, каково значение символа, если это не адрес символа?

(Кстати, я работаю на Mac с OSX 10.7)

7
задан Simon 3 May 2012 в 11:43
поделиться