我目前正在尝试对一个似乎是针对x86 未受管保护模式构建的程序(~30KB,主要是代码)进行逆向工程。它包含直接访问物理内存(或内存映射设备寄存器更精确)的指令,例如:
mov esi, 0FED400000h ; Some device base address
mov eax, [esi+18h] ; Memory mapped status register of said device
我想在 QEMU 中运行该程序,理想情况下可以在gdb等调试器中逐步执行该程序。
现在的问题是代码中编码的绝对内存地址导致任何启用了分页的操作系统出现分段错误。
我一直在想办法绕过这个:
到目前为止,我还没有其他选项可以运行这个程序吗?或者您对上述想法有任何建议,补充或经验吗?
答案 0 :(得分:1)
我见过的几个SINIT模块在条目处有一个小的实模式加载器部分,它解析并跳转到嵌入模块末尾的普通PE文件。因此,如果您不需要调试加载程序,则可以提取PE,然后使用支持PE文件的DOS扩展程序之一(例如HX-DOS,WDOSX)从DOS加载和调试它。但请注意,一旦模块运行并发出CLOSE-PRIVATE命令,将无法访问专用TXT寄存器。
tpm_tis
驱动程序。因此,您可以拦截这些访问(使用信号/异常处理程序)并将它们重定向到实际的TPM。