在当前 ELF 加载程序存在的情况下,如何插入修改后的 ELF 加载程序?

在当前 ELF 加载程序存在的情况下,如何插入修改后的 ELF 加载程序?

我需要修改 Ubuntu 14.04 发行版的 ELF 加载程序的内核实现。使用以下方式下载源:

sudo apt-get source linux-image-$(uname -r)

我运行了配置脚本:

make config

在根源树中。在看似无穷无尽的输入请求序列之后,脚本创建了.config构建内核(或一组模块)所需的文件。我使用的内核版本是linux-3.13.0,它具有以下源树布局:

$ ls 
arch              Documentation      fs          kernel          README             sound
block             drivers            include     lib             REPORTING-BUGS     tools
COPYING           dropped.txt        init        MAINTAINERS     samples            ubuntu
CREDITS           elf.dat            ipc         Makefile        scripts            usr
crypto            FileSystemMake     Kbuild      mm              security           virt
debian.master     firmware           Kconfig     net             shortcuts

ELF 加载器位于/path/to/source/fs/binfmt_elf.c.下列的这个问题,为了编译单个模块,运行就足够了

make /path/to/module/directory

在这种情况下,将是:

make /path/to/source/fs

编译相当冗长;大约需要二十分钟(在虚拟机上),并且输出(默认情况下)写入模块所在的同一目录中。我通过运行找到了目标文件:

find . -name "*.o"

/path/to/source/fs。按名称过滤,可以通过运行以下命令找到 ELF 加载程序:

find . -name "*elf*.o"

在当前的源代码中,它被写入(默认):

/path/to/source/fs/binfmt_elf.o

经历过本教程,我注意到内核模块具有命名约定,module_name.ko以便将它们与用户空间对象文件区分开来。

考虑到当前的 ELF 加载器存在(并且卸载它可能会阻止二进制文件的执行),如何将新的(修改后的)ELF 加载器插入内核?

相关内容