如何从内存中执行机器语言?

时间:2010-05-20 12:20:02

标签: python compiler-construction assembly

我编写了一个程序来编译一个简单的文本程序到一个已编译的可执行文件......我是否有可能将一个可执行文件加载到内存中,一个pc计数器与内存空间的对应点如何?

以下是我制作的内容,我希望将程序存储到内存中以便按需执行...有点想制作像php这样的小网页语言但是编译它...只是为了学习。

http://spiceycurry.blogspot.com/2010/05/simple-compilable-programming-language.html

3 个答案:

答案 0 :(得分:1)

它是内存中的可执行文件(如ELF或类似的东西)吗?或者只是内存中的可执行代码? 如果它是内存中的可执行代码,那么如果包含内存是可执行的并且执行将从那里继续,则可以jmp

如果它是一个可执行文件,你需要实际读取和解释要加载,链接等格式字段..因为可执行文件包含需要初始化的静态内存,需要链接的动态库和一个条目需要从文件头读取的点。

答案 1 :(得分:1)

将其构建为专为动态加载而设计的共享库。我确定你需要很多头文件和一些你需要遵守的C风格调用约定。

我建议您在C中编写扩展,尝试绑定,当有效时,从C编译器代码生成阶段获取所有链接汇编程序。

答案 2 :(得分:0)

理论上,您只需将代码加载到某个地址的内存中,然后向其入口点发出JMP即可。如果你在python中工作,你可能需要在用C编写的扩展模块中这样做。

请注意,除非您决定将数据输入/输出您的小代码,并指定允许代码访问的父程序的功能(以及如何),否则这将无用。这意味着定义ABI和调用约定。

此外,除非你采取严格的预防措施,否则我甚至无法开始表达这个系统的不安全性。如果您将风险暴露给公共网站,风险就会增加。