操作指令?

在汇编语言中,如何使用伪操作来执行指令? 据我所知,汇编文件使用汇编器转换为机器代码。 有没有办法直接使用伪操作从程序集文件本身发送操作码?

例如,如果有一些指令,比如说ADD有一个0101的操作码。有没有一种方法可以使用我们对ADD的操作码0101的了解,只是使用0101从某个存储器位置添加两个寄存器,而不使用ADD指令明确? 我正在寻找黑客,并想知道这一点。


使用间接操作码(从指令中指定的数据位置检索指令字节)在我所知的任何机器语言中都不受支持。 但是你有以下可能性:

  • 自我修改代码(您可以对自己的代码段进行写入访问,并即时修补代码字节)
  • 在数据区域中创建一段(短)代码片段,将该区域标记为可执行文件并跳转到该区域(可能您将在那里创建一个子例程,如果它是x86程序集,则以0xC3结尾),然后使用CALL指令(或无论它在你的机器上被调用)。

  • 你没有指定你正在使用的汇编程序,但是GAS例如有.byte伪操作来简单地发送一个字节。 请注意,0101是二进制符号,可能不适合汇编程序。 您应该以十六进制指定操作码。


    是的,这是可能的,实际上缓冲区溢出或堆栈溢出漏洞如何工作来攻击系统安全。 如果二进制值存储到可执行内存中,它们将作为机器语言指令加载并执行,并且0101将ADD(在您的示例中)。

    链接地址: http://www.djcxy.com/p/87133.html

    上一篇: op for an instruction?

    下一篇: Get the address in ARM Inline assembly