Offset no valor do símbolo nm?

Só para lhe dar algum contexto, eis o que estou tentando alcançar: estou incorporando um const char * em um arquivo de objeto compartilhado para ter uma string de versão no próprio arquivo .so. Eu estou fazendo análise de dados e esta seqüência permite-me deixar os dados saber qual versão do software produziu. Isso tudo funciona bem.

O problema que estou tendo é quando tento ler a string da biblioteca .so diretamente. Eu tentei usar

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

e pegue

<code>000000000003d968 D __SMPselection_version_info
</code>

está tudo bem e como esperado (o char * é chamado de _SMPselection_version_info). No entanto, eu teria esperado agora poder abrir o arquivo, procurar 0x3d968 e começar a ler minha string, mas tudo que consigo é lixo.

Quando eu abro o arquivo .so e simplesmente procuro o conteúdo da string (eu sei como ele começa), eu posso encontrá-lo no endereço 0x2e0b4. Neste endereço está aí, zero terminado e como esperado. (Eu estou usando este método por enquanto.)

Eu não sou um cientista da computação. Alguém poderia me explicar por que o valor do símbolo mostrado por nm não está correto ou, diferentemente, qual é o valor do símbolo se não for o endereço do símbolo?

(A propósito, estou trabalhando em um Mac com OSX 10.7)

questionAnswers(4)

yourAnswerToTheQuestion