QEMU 翻译块

逆向工程 奇木 仿真
2021-06-14 05:46:00

我正在研究 QEMU 如何翻译原生基本块并运行它们。据我了解,它读取原生基本块然后重新翻译它们,但我想知道它如何处理内部异常,所以我运行以下程序:

// pgfault.c
int main() {
    __asm__(
        "xor rax, rax\n\t"
        "mov rbx, [rax]\n\t"
        "xor rcx, rbx\n\t"
        "add rax, rcx\n\t"
        );
}

// compile
x86_64-w64-mingw32-gcc pgfault.c -masm=intel -o pgfault.exe

// and run in PANDA/QEMU

确实,我得到了跟踪:

// first translation block
0x401510           xor rax, rax    ; first instruction of main
; second instruction generates a page fault

// second translation block (KiPageFault in ntoskrnl.exe)
0xfffff80026e4600  push rbx
0xfffff80026e4601  sub rbp, 0x158

第二条指令产生一个页面错误,然后翻译块只包含第一条指令。QEMU/PANDA 如何提前知道(即在翻译步骤)?

0个回答
没有发现任何回复~