JMP rel16(而不是JMP rel32)

Jui*_*icy 2 x86 assembly exploit opcode

我需要为一个漏洞利用演示制作一个跳转操作码.

我需要在跳转指令后跳转到大约200个字节.这太过分了jmp short.

如果我使用常规跳转生成操作码,jmp $200我会得到:

e9 fb 01 00 00
Run Code Online (Sandbox Code Playgroud)

这里的问题是操作码包含00,当将字符串传递给程序时,它被解释为字符串的结尾(因此我不能将完整的shellcode传递给它).

我认为我的方法被搞砸了,但后来我检查了手册,在第二行显然有一个"近似跳跃"需要2个字节(还有另一个需要4个字节,我上面显示的那个).这两个跳转都以相同的字节开头e9.

我如何通过e9 fb 01只接受两个字节参数的近跳转?如何阻止操作系统查找后的四个字节e9,即:e9 fb 01 90 90

500*_*ror 6

你不能.

当处理器在32位模式下运行时,0xE9操作码使用32位偏移,而当处理器处于16位模式时,0xE9操作码使用16位偏移.

  • 从技术上讲,这不是真的.您可以使用操作数大小覆盖.问题在于目标EIP将被屏蔽为16位.@Juicy:作为一种解决方法,您可以使用2次跳转来弥补差距. (5认同)