現在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

コンパイルはかなり冗長です。 (仮想マシンでは)約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ローダーをカーネルにどのように挿入できますか?

関連情報