私は、検証テスト スクリプトがテスト対象のソフトウェアのビルド内でシンボル アドレスを見つける必要があるプロジェクトに取り組んでいます。これは、ブレークポイントの設定やメモリからの静的データの読み取りに使用される場合があります。私が求めているのは、シンボル名、メモリ内のベース アドレス、およびサイズを含むマップ ファイルを作成することです。私たちのビルドは、必要な情報を含む ELF ファイルを出力します。readelf、nm、および objdumpツールを使用して、必要なシンボル アドレスを取得しようとしています。
私が最初に試したところreadelf -s file.elf
、いくつかのシンボル、特にアセンブラーで記述されたシンボルにアクセスしているように見えました。しかし、私が欲しかったシンボルの多くはそこにありませんでした。特に、Ada コード内で発生したものです。
以前readelf --debug-dump file.elf
はすべてのデバッグ情報をダンプしていました。そこから、Ada コードにあったものを含め、すべてのシンボルが表示されます。ただし、形式はDWARF形式のようです。シンボリック情報をリストするように依頼したときに、これらのシンボルが readelf によって出力されない理由を知っている人はいますか? おそらく、私が見逃しているオプションがあるだけです。
カスタム DWARF パーサーを作成して情報を取得することもできますが、Binutils (nm、readelf、objdump) のいずれかを使用して情報を取得できる場合は、標準的なソリューションを使用したいと思います。