用尽可能少的字节在汇编指令中创建错误
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
当然还有其他的可能性。仅仅是因为让一个程序崩溃比保持它更容易 运行 :)
编辑:由于评论中的建议,包括 HLT
、UD2
。 CLI
和 STI
不会在每种情况下都#GP,例如IOPL=CPL=3.
我正在尝试根据特定的汇编指令在 运行 过程中引发错误。我可以更改说明,但不确定如何可靠地创建错误。
我想确保其他指令保持不变,并且进程仅在执行特定指令时崩溃。所以我需要的是如果可能的话用 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
当然还有其他的可能性。仅仅是因为让一个程序崩溃比保持它更容易 运行 :)
编辑:由于评论中的建议,包括 HLT
、UD2
。 CLI
和 STI
不会在每种情况下都#GP,例如IOPL=CPL=3.