将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1391字,纯文字阅读大概需要2分钟。
内容图文
![将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中](/upload/InfoBanner/zyjiaocheng/961/61f98b504d544c8fa4ccdf549ba3cf1e.jpg)
我正在开发一个项目来加载和运行Linux平台上的自定义二进制格式可执行文件(在我的例子中是PE).到目前为止,我已经成功地完成了这项工作,首先加载可执行文件,然后加载一个调用可执行文件起始地址然后安全退出的小型ELF共享库.
不过,出于某些原因,我真的不想自己装ELF.首先,我使用的共享库是用汇编语言编写的(我不能使用任何其他东西,因为我没有链接到libc等),这将是非常特定于平台的,我想摆脱它并使用C所以我可以编译任何平台.此外,使用Linux的本机ELF加载程序而不是我自己的简化版本将更容易,更安全.
我想知道是否有办法使用我的binfmt处理程序,一个已安装的内核模块来加载我的可执行文件,然后让Linux将我的共享库(及其依赖项)加载到同一地址空间而不覆盖我的可执行代码.我首先想到uselib系统调用可能有用,但是手册页上的描述不清楚这是否符合我的目的:
From libc 4.4.4 on only the library “/lib/ld.so” is loaded, so that
this dynamic library can load the remaining libraries needed (again
using this call). This is also the state of affairs in libc5.glibc2 does not use this call.
我也从未见过它的使用示例,我总是担心使用我不理解的系统调用.
有没有一个很好的方法来实现我所描述的?我是否可以使用Linux的现有功能将共享库(用C编写)加载到已包含可执行代码的地址空间中,如果是这样,我如何使用该库而不知道它已被加载到何处?
解决方法:
已经有一个名为binfmt_pe(由我来做)的项目,它是一个内核模块,并且拥有自己的链接器(类似于/ lib / ld). check it out here.
至于你关于制作模块和加载器/链接器的问题,下面有链接.我还包括有关ELF和PE可执行文件的信息的链接.
我希望这有帮助.
内容总结
以上是互联网集市为您收集整理的将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中全部内容,希望文章能够帮你解决将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。