c++从内存执行函数

C++ execute function from memory

本文关键字:函数 执行 内存 c++      更新时间:2023-10-16

我最近在考虑一种可预编译的脚本语言,它可以在程序加载时被翻译成机器代码。

假设我可以自己生成这个二进制函数。现在我需要执行它。一般方案是这样的:

char* binary = compile("script.sc");
pushArgsToStack(1,7);
memexec(binary);
int ret = getEax();

有机会让它工作吗?

同样,调用jmp到c++函数地址会像计划的那样工作吗?我的意思是,在推入args, returnAddr等等之后,我想从我编译的脚本中调用那个函数。

谢谢你的回答

这当然可以做到。

最大的部分将是compile函数,除非你的"。语言是非常琐碎的,将需要相当多的工作。您可能想看一下例如llvm,它允许您从中间虚拟机指令集生成代码。它增加了大量的代码,但是在生成(相当好的)指令时使您的生活更容易一些。

你不能在函数中真正地推入参数——当你返回时,推入将被移除。您必须在"编译"过程中生成推送指令。

你应该能够做:

int ret = memexec(binary);

您可能想要在汇编中编写memexec,并且可能让它接受多个参数(但是如果这些参数是什么类型,您仍然会遇到问题,因此可能需要某种类型信息的参数列表-或者总是将参数作为字符串传递,或诸如此类)

假设您有一个在过去15-20年制作的操作系统,您还需要分配具有"执行权限"的内存,这需要malloc以外的东西。根据操作系统的不同,您需要的调用将有所不同。