Offset in nm Symbolwert?

Um Ihnen einen gewissen Kontext zu geben, möchte ich Folgendes erreichen: Ich binde ein const char * in eine gemeinsam genutzte Objektdatei ein, um eine Versionszeichenfolge in der .so-Datei selbst zu haben. Ich mache eine Datenanalyse und diese Zeichenfolge ermöglicht es mir, den Daten mitzuteilen, welche Version der Software sie erzeugt hat. Das alles funktioniert gut.

Das Problem, das ich habe, ist, wenn ich versuche, den String direkt aus der .so-Bibliothek zu lesen. Ich habe versucht zu verwenden

<code>nm libSMPselection.so | grep _version_info
</code>

und bekomme

<code>000000000003d968 D __SMPselection_version_info
</code>

Das ist alles in Ordnung und wie erwartet (das Zeichen * heißt _SMPselection_version_info). Allerdings hätte ich erwartet, jetzt in der Lage zu sein, die Datei zu öffnen, nach 0x3d968 zu suchen und mit dem Lesen meiner Zeichenfolge zu beginnen, aber alles, was ich bekomme, ist Müll.

Wenn ich die .so-Datei öffne und einfach nach dem Inhalt der Zeichenfolge suche (ich weiß, wie sie beginnt), kann ich sie unter der Adresse 0x2e0b4 finden. An dieser Adresse ist es da, Null terminiert und wie erwartet. (Ich benutze diese Methode jetzt.)

Ich bin kein Informatiker. Könnte mir bitte jemand erklären, warum der von nm angezeigte Symbolwert nicht korrekt ist, oder anders ausgedrückt, was ist der Symbolwert, wenn es sich nicht um die Adresse des Symbols handelt?

(Übrigens arbeite ich auf einem Mac mit OSX 10.7)

Antworten auf die Frage(4)

Ihre Antwort auf die Frage