-1
アセンブリ(ブートローダとカーネル)にOSを書いていて、QEMUを使ってデバッグしています。
私はいくつかのデバッグブレークポイントを設定して、実行を一時停止し、その時に1つの命令だけを実行したい(シングルステップ)。また、実行時にレジスタとメモリの内容を読み込んで設定したい。私はこれを行う方法はGDBを使うことだと読んでいます。問題は私がGDBを検索した前後でGDBを使用していないことです。GDBはオブジェクトファイル内のCコンパイラ(gcc)によってラベル付けされたラベルを使用しています。しかし、私が言ったように(NASMを使って)議会で書いているのですが、私は純粋な生のバイナリを持っていますので、それをどうやって行うのですか?別の方法で存在しますか?たぶん私自身のGDBサーバーなどを作成できますか?Qemuがアセンブリカーネルをデバッグする
gdbは未加工アドレスを使用できます。ヘルプまたはマニュアルを参照してください。また、デバッグ情報を使用してasmコードを構築することを止めるものではなく、ラベルや行番号を使用することができます。 – Jester
アセンブリファイルをデバッグ情報でコンパイルできます(オプションはアセンブラに依存しますが、NASMでは-g -F dwarfを使用できます)。 _C/C++ _をデバッグ情報(GCCは '-g'オプション)でコンパイルします。リンカを使用してELFファイルを作成します(このELFファイルにはデバッグ情報が含まれています)。 GRUBを使用せずに独自のブートローダを書いた場合、ELF実行可能ファイルをバイナリファイルに変換するために 'objcopy'のようなものを使う必要があります。 –
NASMを使用してELFではなくBINaryファイルを生成している場合、NASMは '-f bin'オプションでデバッグの方法をあまりサポートしていないため、ビルド方法を再構成する必要があります。 –