コンテキストを説明するために、私が達成しようとしていることは次のとおりです。.soファイル自体にバージョン文字列を含めるために、共有オブジェクトファイルにconstchar*を埋め込みます。私はデータ分析を行っていますが、この文字列を使用すると、どのバージョンのソフトウェアがデータを生成したかをデータに知らせることができます。これはすべて正常に機能します。
私が抱えている問題は、.soライブラリから文字列を直接読み取ろうとしたときです。使ってみました
nm libSMPselection.so | grep _version_info
取得します
000000000003d968 D __SMPselection_version_info
これはすべて問題なく、期待どおりです(char *は_SMPselection_version_infoと呼ばれます)。ただし、ファイルを開いて0x3d968を探し、文字列の読み取りを開始できると期待していましたが、取得するのはゴミだけです。
.soファイルを開いて、文字列の内容を検索すると(文字列の開始方法はわかっています)、アドレス0x2e0b4で見つけることができます。このアドレスでは、ゼロが終了し、期待どおりにそこにあります。(私は今のところこの方法を使用しています。)
私はコンピューター科学者ではありません。nmで示されるシンボル値が正しくない理由、または別の方法で、シンボルのアドレスでない場合のシンボル値は何であるかを誰かに説明してもらえますか?
(ちなみに私はOSX 10.7を搭載したMacで作業しています)