2013-11-04 10 views
5

私はqemuを初めて使用しています。これは、一段階モードエミュレーションを可能にすることを読んでいます。これは、毎回物理的なラムのいくつかのアドレスをダンプしようとしているので役に立ちます。残念ながら、qemuのドキュメントは非常に悪いです。私はqemuモニターから一段階モードを有効にする方法を知っていますが、私は各段階で実行したいコードをどこに置くべきか分かりません。誰もこれについて何か情報を持っていますか?QEMUでシングルステップモードを使用するには?

+0

@peterからの回答があなたを助けましたか? – stackoverflowwww

+1

関連:https://reverseengineering.stackexchange.com/questions/4738/using-qemu-monitor-interface-to-extract-execution-traces-from-a-binary –

答えて

0

あなたはQEMUに::

--gdb TCPをゲストに添付する

オプションをGDBを使用して、

$ gdb <binary> 
(gdb) symbol-file <sym file> 
(gdb) target remote <host>:<port number> 
(gdb) b <function> 
(gdb) c 

'b' のブレークポイントを設定を使用することができます。 'n' 's' 'i'はコードを踏んで歩ける。 GDBモードで「情報」を入力すると、上記のリンクから詳細

+0

また、よくある質問があります。それはうまく動作します - おそらく、gdbがフックするための各ステップごとにブレークポイントが発生しますか? –

+0

より詳細なQEMU GDBセットアップガイドです:https://stackoverflow.com/a/33203642/895245 –

0

http://www.xenproject.org/help/questions-and-answers/problem-with-vga-passthrough.html

はQEMUのためsinglestepモードを入力するためのコマンドラインオプションで表示されます。 do_singlestep(モニター*月、constのQDict * qdict)

は単にフラグ "singlestep" を設定します。次のQEMU( http://wiki.qemu.org/Download

ための機能monitor.cをソースコードを取得することです。これは、ハードウェアの一段階エミュレーションをエミュレートする「singlestep_enabled」と同じではないことに注意してください。

(グローバル変数はvl.cで宣言されています)。今targt-I386/translate.cのすべての機能を調べる

- 「singlestep」フラグがテストされています:

if (singlestep) { 
     gen_jmp_im(pc_ptr - dc->cs_base); 
     gen_eob(dc); 
     break; 
    } 

これは、バイナリがいずれかの実行(または「翻訳」されている場所でありますより正確なもの)、あるいはハードウェア例外の発生とハンドラ(たとえば)があります。おそらくあなたがここで試すことができます変更する動作がある場合は?

関連する問題