我有一个用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