2012-03-22 6 views
7

GDBを使用して、組み込みデバイスで実行可能ファイルをロードしています。実行可能ファイルをロードする場合、GDBは言う:"プログラムカウンタ"と "開始アドレス"の差

xPSR: 0x01000000 pc: 0xf0094902 msp: 0x2001b508 
Loading section .text, size 0x16240 lma 0x8000000 
Loading section .data, size 0x8f0 lma 0x8016240 
Start address 0x8000000, load size 92976 
私が理解したよう

pcは、命令ポインタです。私は、 "開始アドレス"がpcの開始アドレスであると仮定しています。しかし、GDBが私に与えている情報では、開始アドレス(0x8000000、それに付随して.textと同じです)は、pc(0xf0094902)と同じではなく、ではありません。

pcと開始アドレスの違いは何ですか?開始アドレスを.textと同じにすることは理にかなっていますか?

+0

ロード後、 'info registers'を試して* pc *の値を確認してください。私は@dwelchが正しいと思う。これらのレジスタは、GDBで 'run'を実行した後、アプリケーションにとって意味のあるものだけを持っています。 – karlphillip

答えて

3

ここでいう「開始アドレス」とは、実行開始アドレスではなく、バイナリイメージの先頭を指します。実行の開始アドレスはリセットベクトルに保持されているものです(前のCortex-M3を使用していると仮定します)。

5

あなたが起動した後、の前にプログラムカウンタが現在の値であると仮定します。実行を開始しました。実行を開始すると、当然のことながらプロセッサに依存しますが、ロードされたコードの実行を開始するアドレス、プロセッサが再び実行される前にプログラムカウンタを設定するアドレスを記述する可能性が最も高いです。あなたが実行してすぐに停止すると、PCの.textの範囲に何かが表示されます。0x80000000 + 0x16240

+0

私は起動用のPCがROMブートローダのどこかにあると思う。 – blueshift

1

Wikipedia: "特定のコンピュータの詳細によって、PCまたはIPは、実行されるべき命令のアドレス、または実行されるべき次の命令のアドレス」である。私は確信することはできませんが、おそらく実行する次の命令を保持しています。

編集:あなたはおそらく、あなたのプロセッサのマニュアルをチェックrigth答えを見つけることができ

。たとえば、MSP430マイクロコントローラでは、PCの初期条件はリセットベクタのアドレスです。したがって、レジスタの初期条件を見つけるためにプロセッサのドキュメントをチェックしてください。

+1

それはプロセッサによって異なります。特に、値のプログラマビューでは、ハードウェアが複数のコピーを1つの取り出し用に、1つをプログラマ用に使用するなど、1つの定義を持つことがあります。各プロセッサごとに文書化されています。 –

+0

あなたはまったく正しいです。 – LuisEspinoza

関連する問題