C(或asm):如何执行存储在内存中的c代码(从标签复制)

Mor*_*öfl 7 c memory assembly

我尝试通过将标签之间的C代码中的代码段复制到malloc分配的内存来"内联"我的VM.所以我用开始和结束标签定义了Ops,我想将以下代码定义的指令复制到缓冲区然后执行(我不确定这是否可行)

OP_PUSH0_START:
    sp += 4; *sp = 0; // I WANT THE INSTRUCTIONS OF THIS LINE COPIED TO THE BUFFER
OP_PUSH0_END:
Run Code Online (Sandbox Code Playgroud)

这样做我认为以下代码片段将起作用

void * ptr0 = &&OP_PUSH0_START;
void * ptr1 = &&OP_PUSH0_END;
while(ptr0 < ptr1)
{
    buf[c++] = *ptr0;
    ptr0++;
}
goto buf; //jump to start of buffer
Run Code Online (Sandbox Code Playgroud)

但我不能在没有记忆错误的情况下阅读它

我会很高兴任何链接或任何建议如何实现这一点

Ale*_*nze 3

将执行转移到任意位置的唯一合法方法是使用函数指针。goto只跳转到标签,而不是数组或其他任何内容。

您也不能获取标签的地址。标签不是对象或函数。

正确地指出,数据区域通常放置在内存中,其内容不能作为 CPU 指令执行。然而,通常有解决方法。Windows 和 Linux 提供了更改内存区域的权限/权利/特权/无论您如何称呼它的功能。

例如,下面是执行您尝试在 Windows 上执行的操作的示例。