如何在其中创建带有"假"指令的x86二进制文件

Kar*_*ine 4 x86 assembly

我正在开发一个项目,我想在x86中添加一些自定义操作码并在QEMU中运行它们.我已经想出如何修改QEMU中的代码生成,以便使用'假'操作码进行汇编指令并在QEMU中对其执行某些操作.

但是,我遇到麻烦的部分是我如何实际创建一个带有伪指令的二进制文件.我想到的唯一方法是添加一些db语句,然后手动编写指令.例如:

xor EAX, EBX
db 0xf1,0x32,0x55,0x00
mov EBX, EAX
Run Code Online (Sandbox Code Playgroud)

(假设db有足够的字节作为实际指令).这实际上是否会编译一个二进制文件,其中我在第二行中定义的字节被视为指令?

有更优雅的方法吗?由于我将修改QEMU以支持这些更改,因此我并不受指令格式的限制 - 我只需要让QEMU的代码生成器识别OP代码,其余的我可以根据需要制定.

wal*_*lyk 8

db当出现新的CPU模型时,使用的方法是标准程序,当前工具没有立即更新以支持附加的寻址模式和/或指令.

请注意,现在在x86指令集中找到用于定义新指令的漏洞是相当具有挑战性的.查看英特尔最新的CPU架构文档:附录中总有一组表格显示操作码映射.这将是找到未使用的指令操作码序列的最简单方法.


NPE*_*NPE 5

没问题,db并且会在第一条指令之后和最后一条指令之前立即发出给定的字节序列.

您可以考虑为新指令创建一堆汇编程序宏,它们将获取相关参数并发出您的魔术字节码.