Android エミュレータは汎用オープンソースマシンエミュレータである QEMU をベースにしています。QEMU は、ゲスト命令をホストプロセッサが理解できる命令にオンザフライで変換することで、ゲスト CPU をエミュレートします。ゲスト命令の各基本ブロックは逆アセンブルされ、Tiny Code Generator (TCG) と呼ばれる中間表現に変換されます。TCG ブロックはホスト命令のブロックにコンパイルされ、コードキャッシュに保存されて、実行されます。基本ブロックの実行後、QEMU は次のゲスト命令のブロックに対してこのプロセスを繰り返します (またはすでに変換済みのブロックをキャッシュからロードします)。このプロセス全体を動的バイナリ変換と呼びます。
Android エミュレータは QEMU のフォークであるため、モニタリング、デバッグ、トレース機能など、すべての QEMU 機能を備えています。QEMU 固有のパラメータは -qemu コマンドラインフラグでエミュレータに渡すことができます。QEMU の組み込みトレース機能を使用して、実行された命令と仮想レジスタ値をログ記録できます。-d コマンドラインフラグで QEMU を起動すると、実行中のゲストコード、マイクロオペレーション、ホスト命令のブロックをダンプします。-d_asm フラグでは、QEMU はゲストコードの基本ブロックが QEMU の変換関数に入るとすべてログ記録します。以下のコマンドは変換されたすべてのブロックをファイルにログ記録します。
emulator -show-kernel -avd Nexus_4_API_19 -snapshot default-boot -no-snapshot-save -qemu -d in_asm,cpu 2>/tmp/qemu.log
残念ながら、QEMU では完全なゲスト命令トレースを生成することは不可能です。コードブロックがログに書き込まれるのは、キャッシュから取得された時ではなく、変換された時のみであるためです。たとえば、ブロックがループで繰り返し実行される場合、最初の反復のみがログに出力されます。QEMU で TB キャッシュを無効にする方法はありません (ソースコードをハックすることを除く)。とはいえ、ネイティブに実行される暗号アルゴリズムの逆アセンブリを再構築するなど、基本的なタスクにはこの機能は十分です。