Eu preciso modificar a implementação do kernel do carregador ELF de uma distribuição Ubuntu 14.04. Tendo baixado as fontes usando:
sudo apt-get source linux-image-$(uname -r)
Eu executei o script de configuração:
make config
na árvore de origem raiz. Após uma sequência aparentemente interminável de solicitações de entrada, o script criou o arquivo .config
necessário para construir o kernel (ou um conjunto de módulos). A versão do kernel que estou usando é linux-3.13.0
e tem o seguinte layout de árvore de origem:
$ 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
O carregador ELF está localizado em /path/to/source/fs/binfmt_elf.c
. Seguindo esta questão , a fim de compilar um módulo individual é suficiente para executar
make /path/to/module/directory
Nesse caso, seria:
make /path/to/source/fs
A compilação é bastante longa; leva cerca de vinte minutos (em uma máquina virtual) e a saída é gravada (por padrão) no mesmo diretório em que o módulo está localizado. Eu encontrei os arquivos objeto executando:
find . -name "*.o"
em /path/to/source/fs
. Filtrando por nome, o carregador ELF pode ser localizado executando:
find . -name "*elf*.o"
Nas fontes atuais, ele é escrito (por padrão) em:
/path/to/source/fs/binfmt_elf.o
Tendo passado por este tutorial , notei que os módulos do kernel têm a convenção de nomenclatura module_name.ko
para distingui-los dos arquivos de objetos do espaço do usuário.
Como posso inserir o novo carregador ELF (modificado) no kernel, dado que o carregador ELF atual está presente (e descarregá-lo pode impedir a execução de binários)?