2017-08-18 11 views
-1

アセンブリ(ブートローダとカーネル)にOSを書いていて、QEMUを使ってデバッグしています。
私はいくつかのデバッグブレークポイントを設定して、実行を一時停止し、その時に1つの命令だけを実行したい(シングルステップ)。また、実行時にレジスタとメモリの内容を読み込んで設定したい。私はこれを行う方法はGDBを使うことだと読んでいます。問題は私がGDBを検索した前後でGDBを使用していないことです。GDBはオブジェクトファイル内のCコンパイラ(gcc)によってラベル付けされたラベルを使用しています。しかし、私が言ったように(NASMを使って)議会で書いているのですが、私は純粋な生のバイナリを持っていますので、それをどうやって行うのですか?別の方法で存在しますか?たぶん私自身のGDBサーバーなどを作成できますか?Qemuがアセンブリカーネルをデバッグする

+0

gdbは未加工アドレスを使用できます。ヘルプまたはマニュアルを参照してください。また、デバッグ情報を使用してasmコードを構築することを止めるものではなく、ラベルや行番号を使用することができます。 – Jester

+0

アセンブリファイルをデバッグ情報でコンパイルできます(オプションはアセンブラに依存しますが、NASMでは-g -F dwarfを使用できます)。 _C/C++ _をデバッグ情報(GCCは '-g'オプション)でコンパイルします。リンカを使用してELFファイルを作成します(このELFファイルにはデバッグ情報が含まれています)。 GRUBを使用せずに独自のブートローダを書いた場合、ELF実行可能ファイルをバイナリファイルに変換するために 'objcopy'のようなものを使う必要があります。 –

+0

NASMを使用してELFではなくBINaryファイルを生成している場合、NASMは '-f bin'オプションでデバッグの方法をあまりサポートしていないため、ビルド方法を再構成する必要があります。 –

答えて

0

私は、GDBがラベルが利用可能な場合があることを行うん

オブジェクトファイル内のGDBは、Cコンパイラ(GCC)でputedラベルを使用していることを実感。そうでない場合、GDBは生のアドレスを表示します。

他の「ラベル」が使用可能な場合でも、生のアドレスにブレークポイントを設定することはありません。

関連する問題