使用 gcc 修改内存中的下一条指令

Jav*_*efi 2 c assembly gcc instructions self-modifying

我想在获取下一条指令之前修改它,在foo 函数中的这篇文章的最佳答案中,*p指向 main 函数中的下一条指令。我想修改where*p指向的内容。例如我想将下一条指令更改为跳转指令。我怎样才能做到这一点?

void foo()
{
    void** p = search((void**)&p, __builtin_return_address(0));
    // modify content of where *p points at.
}

int main()
{
    
    foo();
    //next instruction. *p points here
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想在 intel Core-i7 3632QM 处理器上使用 gcc 编译器来执行此操作。

Pas*_*uoq 5

例如我想将下一条指令更改为跳转指令。我怎样才能做到这一点?

在具有现代操作系统的桌面系统上,您不能这样做,除非正在执行的程序已注意将代码保存在读写内存页面中。默认情况下,代码加载到只读内存页中。

  • @MikeofSST我从未尝试过它,但我相信遵循http://stackoverflow.com/a/4169440/139746中的步骤足以允许修改代码。 (3认同)