首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >运行存储在内存中的代码

运行存储在内存中的代码
EN

Stack Overflow用户
提问于 2013-05-19 03:45:50
回答 1查看 1.4K关注 0票数 3

问题:

运行作为asm指令存储在另一个c程序的堆或数据段上的重要c程序。

我的进展:

运行了一组简单的指令,将一些内容打印到stdout。指令存储在堆中,我允许执行包含指令的页面,然后像调用函数一样调用原始数据。这样做效果很好。

接下来,我希望给定任何静态链接的c程序,只要读取它的二进制文件,并且能够在内存中从另一个c程序运行它的main函数。

我认为问题是:*跳转到主函数代码所在的位置*更改链接时创建的二进制文件的地址,以便它们相对于代码现在在内存中的位置

请让我知道我的方法是否好,或者我是否遗漏了一些重要的东西,以及最好的方法是什么。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-19 04:16:46

现代OSes尽量不让您在数据中执行代码,因为这是一个安全噩梦。http://en.wikipedia.org/wiki/No-execute_bit

即使你克服了这一点,也会有更多的“陷阱”,因为两个程序都会认为它们拥有堆栈/堆等。一旦新程序执行,旧程序的各种RAM位就会被践踏。(exec就是因为这个原因才出现的,就是为了从一个程序干净地转到另一个程序。)

如果你真的需要加载代码,你应该将第一个作为库,然后使用dlopen来运行它。(您可以使用objcopy仅提取所需的子例程,并将其转换为库。)

或者,您可以启动程序(在另一个进程中),并使用strace将您的一小部分代码注入到他们的进程中以控制它。

(如果您真的想了解shell代码,您应该这样说。这是一个完整的“另一罐蠕虫”。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16628323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档