オペレーティングシステムのローダー(ブートローダーではなく実行可能プログラムローダー)を置き換えることができるかどうか疑問に思っていました(Windowsが私の選択です)。デフォルトのローダーにパッチを適用できるサードパーティのローダーはありますか。
OS ローダーを制御する方法はありますか? つまり、それが行っていることを私に見えるようにしたいのです(すべてのステップ)。
なんでやりたいのかと聞かれたら、For learning purposes.
オペレーティングシステムのローダー(ブートローダーではなく実行可能プログラムローダー)を置き換えることができるかどうか疑問に思っていました(Windowsが私の選択です)。デフォルトのローダーにパッチを適用できるサードパーティのローダーはありますか。
OS ローダーを制御する方法はありますか? つまり、それが行っていることを私に見えるようにしたいのです(すべてのステップ)。
なんでやりたいのかと聞かれたら、For learning purposes.
いいえ、プロセスの作成とntdllのユーザーモードローダーは相互に関連付けられています(PsCreateProcessはntdllに直接マップしてジャンプし、モジュールの解決とプロセスのセットアップを完了できるようにします)。これを置き換えることはできません。
この種のことをしたい場合は、Linux が最適です。
ローダーはカーネルの一部ですが、すべてのカーネル ソースにアクセスできるので、心ゆくまで操作できます。
回答とコメントのそれぞれが有用な情報を提供しているため。すべての回答とコメントを 1 つの投稿にまとめました。
オペレーティングシステムのローダー(ブートローダーではなく実行可能プログラムローダー)を置き換えることができるかどうか疑問に思っていました(Windowsが私の選択です)。
いいえ、Windows では、プロセスの作成と ntdll のユーザー モード ローダーが結び付けられています (PsCreateProcess は ntdll に直接マップされ、そこにジャンプして、モジュールの解決とプロセスのセットアップを完了することができます)、それを置き換えることはできません。
ただし、プロセスの形式とロードについて説明している利用可能なリソースがあります。
これは、PEファイル(exe + dll)に関する非常に古いが、まだ最新のMSDN記事です。
- パート I. Matt Pietrek による Win32 ポータブル実行可能ファイル形式の詳細 (MSDN マガジン、2002 年 2 月)
- パート II。Matt Pietrek によるWin32 ポータブル実行可能ファイル形式の詳細 (MSDN マガジン、2002 年 3 月)
この情報を使用して、特定の実行可能ファイルを開始するアプリを作成できます。
Linux と elf 形式に興味がある場合は、Google で必要なものがすべて見つかります。
OS ローダーを制御する方法はありますか? つまり、それが行っていることを私に見えるようにしたいのです(すべてのステップ)。
Windows では、Loader Snapsを有効にすることで、作業中のローダーをある程度可視化できます。これは、gflags.exe
(Debugging Tools for Windows の一部) を使用して行います。http://www.osronline.com/DDKx/ddtools/gflags_4n77.htmという素晴らしいgflags.exe
リファレンスがあります。Show Loader Snaps を有効にすると、デバッガー (WinDBG) でアプリケーションを起動して、ローダー トレース メッセージを表示できます。
このようなことをしたい場合は、Linux が最適です。
ローダーはカーネルの一部ですが、すべてのカーネル ソースにアクセスできるので、心ゆくまでそれで遊ぶことができます。
さまざまなバイナリ形式のローダーがfs/binfmt_*.c
Linux ソースに含まれています (fs/binfmt_elf.c
は、ELF 形式の実行可能ファイルに使用されるローダーです。つまり、圧倒的多数です)。
動的ローダー/lib{,64}/ld-linux.so.2
は、動的にリンクされたバイナリにも使用されます。これは、binfmt_elf.c のコードで参照される「インタープリター」の例です。
Linux にはプラグ可能な実行可能ファイル形式があるため、標準的なもの (ELF、シェル スクリプト、binfmt_misc) ではなく、実行可能ファイルで独自のカスタム処理を実行する追加のプログラム ローダーを追加することができます。
このbinfmt_misc
モジュールを使用すると、実行可能プログラムのカスタム ローダーを完全にユーザー空間で作成できます。これは、ネイティブでないバイナリや、Java、CLR 実行可能ファイルなどの解釈されたバイナリを実行するためによく使用されます。
一方、ELF ローダーを別のものに置き換えたい場合は、カーネルで直接 binfmt モジュールを作成できます。例を見てくださいfs/binfmt_*
。ELF ローダー自体はそこにあります。
Linux にはプラグ可能な実行可能ファイル形式があるため、標準的なもの (ELF、シェル スクリプト、binfmt_misc) ではなく、実行可能ファイルで独自のカスタム処理を実行する追加のプログラム ローダーを追加することができます。
binfmt_misc モジュールを使用すると、実行可能プログラムのカスタム ローダーを完全にユーザー空間で作成できます。これは、ネイティブでないバイナリや、Java、CLR 実行可能ファイルなどの解釈されたバイナリを実行するためによく使用されます。
一方、ELF ローダーを別のものに置き換えたい場合は、カーネルで直接 binfmt モジュールを作成できます。例については、fs/binfmt_* を参照してください。ELF ローダー自体はそこにあります。
OSローダーを制御する方法はありますか?つまり、私はそれがしていることを私に見えるようにしたいのです(すべてのステップ)。
Windowsでは、ローダースナップを有効にすることで、作業中のローダーをある程度可視化できます。これは、gflags.exe(Windows用のデバッグツールの一部)を使用して行います。ここに素晴らしいgflags.exeリファレンスがあります。[ローダースナップの表示]を有効にすると、デバッガー(WinDBG)でアプリケーションを起動することにより、ローダートレースメッセージを表示できます。
いいえ、OS ローダーを置き換えることはできませんが、プロセスのフォーマットとロードについて説明しているリソースを利用できます。
これは、PEファイル(exe + dll)に関する非常に古いが、まだ最新のMSDN記事ですhttp://msdn.microsoft.com/en-us/magazine/cc301805.aspx
この情報を使用して、特定の実行可能ファイルを開始するアプリを作成できます。
Linux と elf 形式に興味がある場合は、Google で必要なものがすべて見つかります。