运行定义为变量的函数

MBy*_*ByD 0 c

我有一个用C编写的程序,它包含2个函数,一个函数是main(),另一个函数是预编译函数,存储为字节数组(让我们称之为varFunc()).指向数组的指针在main函数中被转换为函数指针,然后从main函数中调用它.(见下面的代码)

现在,我知道有操作系统和一些处理器不允许从数据部分执行代码,我varFunc应该就在那里......

有没有办法使用C语言让C编译器在代码/文本部分添加一些变量?如果没有,有没有办法在大多数编译器中通过编译器强制执行?

    char varFuncArr[] = { 0xDE, 0x67, 0x6F, 0x6F, 0xAC, 0x13, 0x05, 0x01, 0xDA, 0xF0, 0xBD, 0x79, 0xA9, 0x10, 0x00, 0x00, 0xB8, 0x74, 0x00, 0x00, 0x00, 0x3F, 0x58, 0x13, 0xEA, 0x0A, 0x2E, 0xEE, 0xC7, 0x01, 0x05, 0xD0, 0x6E, 0xB8, 0x9E};

    typedef unsigned long (*funcPtr)(void* d[]);

    int main(int argc, char** argv)
    {
        unsigned int ra[8];
        funcPtr varFunc;
        for (i=0; i<8; i++)
             ra[i] = 0;
        varFunc = (funcPtr)varFuncArr;
        return varFunc(ra);
    }
Run Code Online (Sandbox Code Playgroud)

注1:我知道这是一个非常笨拙的方式来调用一个函数,它也使它成为超级平台和编译器,但我展示这个例子使其更简单,实际使用包括加密函数而不是varFuncArr().

注意2:不要尝试运行此代码,varFuncArr在此示例中已加密:)

谢谢,Binyamin

Jer*_*ock 5

在海湾合作委员会,你可以__attribute__((section("text")))用来把东西放在特定的部分; 请看这里的文档.Visual C++有__declspec(allocate("section")); 请看这里的文档.