Bochs でメモリダンプをどのように行いますか?
(物理的または仮想のどちらか-しかし両方はさらに良いでしょう!)
この質問はもうしばらく経っていますが、同じ問題があり、解決できました。
Bochsには、次のフラグを使用してアクティブ化できるビジュアルデバッガーが付属しています。
./configure \
--enable-x86-debugger \
--enable-debugger \
--enable-debugger-gui
いつビルドし、このオプションをBochs構成ファイルに追加します。
display_library: x, options = "gui_debug"
GUIデバッガーを開いた状態で、いつでも「ブレーク」ボタンを押すことができます。「表示」メニューには、「物理MemDump」および「線形MemDump」オプションがあります。開始アドレスを入力するだけで、bochsは4kBをダンプします。
必要に応じて、テキストモードを使用することもできます。ブレークポイントは、コマンド「lbreak addr」(線形の場合)または「pbreakaddr」(物理)で設定でき、設定されたブレークポイントを一覧表示するには、「infobreak」と入力します。それらを「d番号」で削除します。シングルステップ(s)および実行を継続する(続行)。
実行を一時停止すると、「x」(線形)と「xp」(物理)の後に、出力形式、バイト数、アドレスなどのオプションのパラメーターを続けてダンプできます。
例:
x /30bx 0xC0000000
線形アドレス0xC0000000から16進形式で30バイトのダンプを作成します。
場合によっては、ダンプが画面で読み取れるほど大きくなることがあります。このような場合、コマンド「writemem」を使用してファイルにそれを行うことができます。
その構文は次のとおりです。
writemem "filename" linearAddress lenght_in_bytes
したがって、線形アドレス0xdeadbeefの最初の1024バイトを「ダンプ」ファイルにダンプする必要がある場合は、次のようになります。
writemem "dump" 0xdeadbeef 1024
動作するはずです。
詳細については、 http://bochs.sourceforge.net/doc/docbook/user/internal-debugger.html を参照してください。
おそらくあなたが探しているのは シミュレーションの保存と復元 :
CPU、memory、およびすべてのデバイスの状態を保存できるようになりました。でBochsを実行すると、ヘッダーバーに「Suspend」というボタンが表示されます。
(強調を追加)
Bochsコンソールでmemsave
およびpmemsave
コマンドを試してください。
‘
memsave addr size file
’サイズサイズのアドレスから始まる仮想メモリダンプをディスクに保存します。
‘
pmemsave addr size file
’サイズサイズのアドレスから始まる物理メモリダンプをディスクに保存します。
どうやらあります writemem
writemem dump a number of bytes of virtual memory starting from
the specified linear address into a file
しかし、それは機能していないようです。