问题:
运行作为asm指令存储在另一个c程序的堆或数据段上的重要c程序。
我的进展:
运行了一组简单的指令,将一些内容打印到stdout。指令存储在堆中,我允许执行包含指令的页面,然后像调用函数一样调用原始数据。这样做效果很好。
接下来,我希望给定任何静态链接的c程序,只要读取它的二进制文件,并且能够在内存中从另一个c程序运行它的main函数。
我认为问题是:*跳转到主函数代码所在的位置*更改链接时创建的二进制文件的地址,以便它们相对于代码现在在内存中的位置
请让我知道我的方法是否好,或者我是否遗漏了一些重要的东西,以及最好的方法是什么。
谢谢
发布于 2013-05-19 04:16:46
现代OSes尽量不让您在数据中执行代码,因为这是一个安全噩梦。http://en.wikipedia.org/wiki/No-execute_bit
即使你克服了这一点,也会有更多的“陷阱”,因为两个程序都会认为它们拥有堆栈/堆等。一旦新程序执行,旧程序的各种RAM位就会被践踏。(exec就是因为这个原因才出现的,就是为了从一个程序干净地转到另一个程序。)
如果你真的需要加载代码,你应该将第一个作为库,然后使用dlopen来运行它。(您可以使用objcopy仅提取所需的子例程,并将其转换为库。)
或者,您可以启动程序(在另一个进程中),并使用strace将您的一小部分代码注入到他们的进程中以控制它。
(如果您真的想了解shell代码,您应该这样说。这是一个完整的“另一罐蠕虫”。)
https://stackoverflow.com/questions/16628323
复制相似问题