1

我正在用两个不同的汇编器组装同一个源。我希望得到两个相同的结果(模内存偏移、NOP 的精确值等)。然而我突然遇到了一个最奇怪的问题:JZ 有两种可能的编码:

74 cb

0F 84 cw/cd

就我而言,位移适合一个字节,一个汇编程序(我认为是 GAS 的一种)发出前者,而另一个(MASM)发出后者。由于我通过匹配输出来执行一些验证,这会导致验证失败。

我对 GAS 的选项几乎没有控制权,但我对 MASM 有完全的控制权。问题 - 是否有选项、指令或特定的命令语法来强制使用一种编码?

4

1 回答 1

0

如果除了这条指令之外的所有代码在汇编时都完全相同,这看起来像是 MASM 中的一个错误。这些说明解决:

74: jz rel8
0F 84: jz rel16/32

因此,MASM 不正确地为该操作码使用了超出其应有的空间。您可以通过在 MASM 中使用更明确的指令形式来解决此问题,例如

jz byte my_label

但是,如果您的机器代码完全不同,这可能是 MASM 的正确行为。确保有符号字/双字参数jz rel16适合有符号字节

于 2013-07-15T20:24:40.780 回答