GCC 生成代码或节具有读写和执行属性

GCC Make Code or Section have Read Write and Execute properties

本文关键字:读写 执行 属性 代码 GCC      更新时间:2023-10-16

我需要能够写入并执行函数,例如此代码(或类似代码)将运行而不会崩溃:

#include "stdio.h"
int function(int i) {
    i = i * 56;
    printf("%in",i);
    return i;
}
int main()
{
    printf("beforen");
    function(5);
    *(int*)function = 0;
    printf("after");
    return 0;
}

预期输出为

before
280
after 

*(int*)function = 0;不会因为写入程序而崩溃的地方。
限制是我不能使用mprotectVirtualProtect,所以我最好的猜测与GCC的__attribute__修饰符有关。我已经设法使用 section 属性将其从 .text 更改为 .data,但这只允许写入或执行,两者都不能同时具有这两个属性。

在函数之前使用 __attribute__((section(".tdata"))) 似乎已经解决了问题。