Przesunięcie w wartości symbolu nm?

Tylko po to, aby dać ci kontekst, oto co próbuję osiągnąć: osadzam const char * w pliku obiektów współdzielonych, aby mieć ciąg wersji w samym pliku .so. Robię analizę danych, a ten ciąg pozwala mi wiedzieć, która wersja oprogramowania go wyprodukowała. To wszystko działa dobrze.

Problem mam, gdy próbuję bezpośrednio odczytać ciąg z biblioteki .so. Próbowałem użyć

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

i dostać

<code>000000000003d968 D __SMPselection_version_info
</code>

wszystko jest w porządku i zgodnie z oczekiwaniami (znak * nazywa się _SMPselection_version_info). Jednak spodziewałbym się teraz, że będę mógł otworzyć plik, szukać 0x3d968 i zacząć czytać mój ciąg, ale wszystko, co dostaję, to śmieci.

Kiedy otwieram plik .so i po prostu szukam zawartości ciągu (wiem, jak się zaczyna), mogę go znaleźć pod adresem 0x2e0b4. Pod tym adresem jest tam, zero zakończone i zgodnie z oczekiwaniami. (Na razie używam tej metody.)

Nie jestem informatykiem. Czy ktoś mógłby mi wyjaśnić, dlaczego wartość symbolu pokazana przez nm nie jest poprawna, lub inaczej, jaka jest wartość symbolu, jeśli nie jest to adres symbolu?

(Przy okazji pracuję na Macu z OSX 10.7)

questionAnswers(4)

yourAnswerToTheQuestion