0

SparcV8のC++シミュレーションモデルを書いています。メモリは単純に配列としてモデル化されます。クロスコンパイラによって生成されたelf-executableを読み取り、それを使用してメモリを初期化する必要があります。次のようにやろうと思っています。

sparc-elf-readelf --hex-dump=.text --hex-dump=.rodata --hex-dump=.data <elf-file> > dump.txt
grep "0x" dump.txt >dump2.txt

これにより、次のような(アドレス、ワード、ワードワード)形式のテキストファイルが生成されます。

  0x00000000 88100000 09000000 81c120b0 01000000 .......... .....
  0x00000010 91d02000 01000000 01000000 01000000 .. .............
  0x00000020 91d02000 01000000 01000000 01000000 .. .............
  0x00000030 91d02000 01000000 01000000 01000000 .. .............
  0x00000040 91d02000 01000000 01000000 01000000 .. .............
  0x00000050 a1480000 29000000 81c521a8 01000000 .H..).....!.....
  0x00000060 a1480000 29000000 81c52220 01000000 .H..)....." ....
  0x00000070 91d02000 01000000 01000000 01000000 .. .............
  ...

Q:最後の列のすべてのドットは何ですか?

Q:elf実行可能ファイルからメモリイメージを生成するためのより良い方法はありますか?.text、.rodata、.dataセクションのみをコピーする必要があると思います

提案をありがとう

4

1 に答える 1

2

Q: What are all the dots in the last column?

アーネストが言うように、それらは印刷できない文字です。つまり、それぞれが7ビットに収まらない(ASCIIではない)バイトであるか、0x20(制御ASCII文字)よりも小さいバイトです。

Q: Is there a better way to generate a memory image from the elf executable? I think I need to copy only the .text, .rodata and .data sections

あなたのアプローチは単にうまくいきません。ELF形式は、セクションがメモリ内のどこに配置されるかに関する情報を提供するだけではありません。また、動的シンボルと再配置を解決するための手順も含まれています。必要なのは、ローダーアクティビティが実行された後のメモリイメージです。

ELF仕様SPARCに適用される補遺を読むことをお勧めします。教育目的でこのプロジェクトに着手するのではない場合は、QEMUなどの既存のプラットフォームおよびアプリケーションエミュレーターのいずれかを使用することもお勧めします。

于 2012-05-06T14:56:48.773 に答える