如何在不将其存储到缓冲区 c/python 的情况下执行汇编操作码?

How to execute assembly opcodes without storing it into buffer c/python?

比如说,我有以下数量的 OpCode 字节 \x90\x90\x90\xb8\x05\x00\x00\x00(注意字节长度可能不同)。我想执行这些操作码而不必将其存储到缓冲区中,我不喜欢它的原因是因为缓冲区存储在内存的数据段中,然后您必须向缓冲区提供执行权限可能会引起安全问题。

因为,我们可以使用 c 的内联汇编来执行汇编指令,我希望下面的方法可以工作:

__asm__("db 0x90");

但它抛出 Error: no such instruction: db 0x90

谁能告诉我如何执行操作码而不将其存储到缓冲区中,我不介意使用 cpython,因为我正在使用 cython。

您的汇编程序的语法要求使用 .byte 而不是 db

GCC 接受两种不同的方言,“att”和“intel”。默认值为“att”,但您可以使用选项 -masm=....

更改它

可以使用关键字“gnu binutils”找到默认的汇编程序文档,例如当前版本知道这些 pseudo operations。它还列出了字节的助记符.dc.b