用尽可能少的字节在汇编指令中创建错误

Create a fault in assembly instructions with as few bytes as possible

我正在尝试根据特定的汇编指令在 运行 过程中引发错误。我可以更改说明,但不确定如何可靠地创建错误。

我想确保其他指令保持不变,并且进程仅在执行特定指令时崩溃。所以我需要的是如果可能的话用 1 或 2 个字节的程序集创建错误。如果原始指令更大,我可以用 NOPs 填充它。

例如:如何改变这2个字节,执行时会崩溃。

7f a9      | jg

我考虑过将操作码设置为任意值,但我不确定这是否真的有效。

非常感谢任何指点! 谢谢,佩德罗!

大多数情况下最短的方法是使用

CCh    int 3

作为触发调试异常的单字节操作码。

如果您正在寻找另一种使用户应用程序崩溃的简单、抗调试的方法,您始终可以使用仅在 CPL0 或内核模式下有效的特权指令,例如

0f 08  invd  (invalidate internal caches)
   f4  hlt   (enter Halt state)
0f 0b  ud2   (invalid opcode)

在大多数情况下也非常有效,并且在 CPL0 中也可以使用两个单字节操作码跳转到某个随机地址,例如

50     push eax
c3     ret

当然还有其他的可能性。仅仅是因为让一个程序崩溃比保持它更容易 运行 :)

编辑:由于评论中的建议,包括 HLTUD2CLISTI 不会在每种情况下都#GP,例如IOPL=CPL=3.