【发布时间】:2022-01-02 06:01:48
【问题描述】:
我正在尝试编写程序集以访问 pci 配置空间。
我想要做的基本上就是这篇文章所做的。
https://sites.google.com/site/pinczakko/pinczakko-s-guide-to-award-bios-reverse-engineering
我的问题是,因为我试图在实模式下执行此操作,并且 pci 配置必须通过 32 位数据访问...我可以在实模式下执行此操作吗?像 eax 这样的寄存器可以在实模式下访问吗?还是我需要切换到保护模式才能执行此操作?
【问题讨论】:
-
是的,32 位操作在实模式下工作正常。它们使用操作数大小覆盖前缀进行编码。只需确保您的汇编器设置为 16 位模式并写入
out dx, eax,您的汇编器就会发出带有前缀的它。 -
该代码专门使用
pushad/popad,因此它可以汇编为16位模式并仍然保存完整的寄存器,而不是pusha/popa,它可能汇编为@987654329 @ 在某些汇编程序中的bits 16模式中。你可以试试看mov eax, 123456是如何汇编成 16 位代码的。