c++从内存执行函数
C++ execute function from memory
我最近在考虑一种可预编译的脚本语言,它可以在程序加载时被翻译成机器代码。
假设我可以自己生成这个二进制函数。现在我需要执行它。一般方案是这样的:
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
以外的东西。根据操作系统的不同,您需要的调用将有所不同。
相关文章:
- 如何以及何时使用 getline 函数执行计算?
- 主函数执行时C++堆栈溢出异常
- 如何编写在函数执行过程中垃圾回收的测试用例?
- 插入到映射中的元素在函数执行后清除
- 遵循 C++ 中的构造函数执行顺序
- 成员函数执行时成员变量的增量
- 关于如何在函数执行后使用和获取返回值的问题
- 从 C 代码 system() 函数执行的 Linux 命令与从终端执行时给出的结果不同
- 顺序异构函数执行器
- 静态 LPTSTR 变量在函数执行后丢失值
- C++如何使函数执行得更快
- C 中函数执行的优先顺序
- 函数执行时间
- 当类成员函数执行时,程序停止工作
- 主函数执行之前的C++segfault
- 如何使用以查看<chrono>函数执行所花费的时间
- 如何从另一个函数执行一个函数
- 函数执行一次
- 为我自己的函数执行通常的算术转换
- 如何对继承构造函数执行正确的SFINAE