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
コンパイルはかなり冗長です。 (仮想マシンでは)約20分かかり、出力は(デフォルトでは)モジュールと同じディレクトリに書き込まれます。以下を実行してターゲットファイルを見つけました。
find . -name "*.o"
存在する/path/to/source/fs
。名前でフィルタリングしたら、次のコマンドを実行してELFローダーを見つけることができます。
find . -name "*elf*.o"
現在のソースコードでは、次のように書かれています(デフォルト):
/path/to/source/fs/binfmt_elf.o
経験豊富このチュートリアルmodule_name.ko
、カーネルモジュールには、ユーザースペースオブジェクトファイルと区別するための命名規則があることがわかりました。
現在のELFローダーが存在することを考慮して(そしてそれをアンロードするとバイナリの実行を防ぐことができます)、新しい(修正された)ELFローダーをカーネルにどのように挿入できますか?