我想在运行时在 C 中生成一个函数。我的意思是我本质上想分配一些内存,指向它并通过函数指针执行它。我意识到这是一个非常复杂的话题,我的问题很幼稚。我也意识到有一些非常强大的库可以做到这一点(例如nanojit)。
但我想学习这项技术,从基础开始。有知识的人可以给我一个非常简单的C示例吗?
编辑: 下面的答案很好,但这里是 Windows 的相同示例:
#include <Windows.h>
#define MEMSIZE 100*1024*1024
typedef void (*func_t)(void);
int main() {
HANDLE proc = GetCurrentProcess();
LPVOID p = VirtualAlloc(
NULL,
MEMSIZE,
MEM_RESERVE|MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
func_t func = (func_t)p;
PDWORD code = (PDWORD)p;
code[0] = 0xC3; // ret
if(FlushInstructionCache(
proc,
NULL,
0))
{
func();
}
CloseHandle(proc);
VirtualFree(p, 0, MEM_RELEASE);
return 0;
}