C++ C++;从内存执行函数

C++ C++;从内存执行函数,c++,assembly,inline-assembly,C++,Assembly,Inline Assembly,我最近想到了可预编译的脚本语言,它将在程序加载期间转换为机器代码 假设我可以自己生成这个二进制函数。现在我需要以某种方式执行它。总体方案如下: char* binary = compile("script.sc"); pushArgsToStack(1,7); memexec(binary); int ret = getEax(); 有机会让它工作吗 也会调用JMP到C++的FunCon地址,像计划的那样工作吗?我的意思是,在按下args、returnAddr等之后,我想从我编译的脚本中调用该

我最近想到了可预编译的脚本语言,它将在程序加载期间转换为机器代码

假设我可以自己生成这个二进制函数。现在我需要以某种方式执行它。总体方案如下:

char* binary = compile("script.sc");
pushArgsToStack(1,7);
memexec(binary);
int ret = getEax();
有机会让它工作吗

也会调用JMP到C++的FunCon地址,像计划的那样工作吗?我的意思是,在按下args、returnAddr等之后,我想从我编译的脚本中调用该函数


谢谢你的回答

这当然可以做到

最大的部分将是
编译
函数,除非您的“.sc”语言非常简单,否则它将需要相当多的工作。例如,您可能想看看
llvm
,它允许您从中间虚拟机指令集生成代码。它添加了大量代码,但在生成(相当好的)指令时,会让您的生活变得更轻松

您不能在函数中真正推送参数-当您返回时,推送将被删除。您必须在“编译”过程中生成推送指令

你应该能够做到:

int ret = memexec(binary);
您可能希望在汇编程序中编写
memexec
,并让它接受多个参数(但如果这些参数是什么类型的,您仍然会遇到问题,因此可能确实需要某种类型的带有类型信息的参数列表,或者始终将参数作为字符串或类似的字符串传递)


假设您拥有过去15-20年制造的操作系统,您还需要分配具有“执行权限”的内存,这需要的不是
malloc
。在操作系统上,您需要的调用会有所不同。

使用VirtualAllocEx()对特定分配的内存块具有额外权限是可行的:@KittyPL:您考虑过使用其他编程语言吗?即使它可以在C++中完成(有很大的努力),也已经有许多现成的动态脚本语言了。我不知道你是否想编写自己的语言,但是——正如Christian Hackl注意到的——已经有这样的解决方案。从我的角度来看,LuaJit似乎就是你想要的。几乎所有我想要的东西:)