我是靠谱客的博主 危机小蘑菇,最近开发中收集的这篇文章主要介绍linux elf 加载位置,将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中...,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我正在开发一个项目来加载和运行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可执行文件的信息的链接.

我希望这有帮助.

标签:linux,memory-management,process,elf,shared-libraries

来源: https://codeday.me/bug/20190725/1536919.html

最后

以上就是危机小蘑菇为你收集整理的linux elf 加载位置,将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中...的全部内容,希望文章能够帮你解决linux elf 加载位置,将ELF共享库和自定义binfmt可执行文件加载到相同的Linux地址空间中...所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部