C 运行定义为变量的函数
我有一个用C编写的程序,它包括两个函数,一个函数是C 运行定义为变量的函数,c,C,我有一个用C编写的程序,它包括两个函数,一个函数是main(),另一个函数是预编译的函数,存储为字节数组(我们称之为varFunc())。数组指针在main函数中被强制转换为函数指针,然后从main函数调用。(见下面的代码) 现在,我知道有些操作系统和一些处理器不允许从数据段执行代码,我的varFunc应该就在那里 有没有一种方法可以使用C语言使C编译器向代码/文本部分添加一些变量?若并没有,在大多数编译器中,有并没有一种方法可以通过编译器强制实现这一点 char varFuncArr[
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);
}
char varFuncArr[]={0xDE,0x67,0x6F,0x6F,0xAC,0x13,0x05,0x01,0xDA,0xF0,0xBD,0x79,0xA9,0x10,0x00,0x00,0xB8,0x74,0x00,0x00,0x00,0x00,0x3F,0x58,0x13,0xEA,0x0A,0x2E,0xEE,0xC7,0x01,0x05,0xD0,0x6E,0xB8,0x9E};
typedef无符号长(*funcPtr)(void*d[]);
int main(int argc,字符**argv)
{
无符号整数ra[8];
funcPtr-varFunc;
对于GCC中的i=0;i,可以使用<代码>第二属性>((段(“text”))< /C>将某个东西放在特定的部分中;参见文档。VisualC++有<代码>
;有关文档,请参阅。与Jeremiah Willcock使用编译器属性的建议不同,您可以mmap
占用一点内存并请求对其执行权限,然后在调用之前将数据复制到那里
您将用平台可移植性(Posix/Windows)换取编译器可移植性(gcc/…),因为它不依赖于特定的编译器,而是依赖于标准Posix函数