- Windowsベースの実行可能ファイルはどのように機能しますか?
- 実行ファイルにはどのように開始アドレスがありますか?
- ファイルの実行場所はどこに保存されていますか?どのようにそれらのアドレスを読み取ることができますか?
- dllファイルまたはexeファイルの呼び出しと再開の仕組みは?
idaプロディスアセンブラのヒントを教えてください。どのようにexeが動作し、dllとexeファイルのアドレス指定の呼び出しが行われるか
idaプロディスアセンブラのヒントを教えてください。どのようにexeが動作し、dllとexeファイルのアドレス指定の呼び出しが行われるか
プログラムの仮想開始アドレスは、実行可能ファイルのヘッダーに記録されます。 HT(http://hte.sf.net/)のように、これらの構造を理解しているヘッダービューアプログラムで簡単に表示することができます。 IDAProに類似したものがあるかもしれません。
任意のDLLまたはEXEファイルの呼び出しとRETが
の仕組みこれは実際にそれがDLLまたは問題のEXEのかどうかに依存しません。
WindowsのモジュールローダーがDLLのロードを終了すると、DLL_PROCESS_ATTACH
パラメータ(the documentation of DllMainを参照)を持つDLLの開始アドレス(「DllMain」と呼ばれる)が呼び出されます。 DllMainが1を返すと、ローダーは引き続きオンになります。
しかし、EXEを起動すると、システムは新しいプロセスを生成し、ntdll.dllをそのプロセスのアドレス空間にマップし、NTDLLの開始アドレスから実行しているメインスレッドを生成します。その後、スレッドはより初期化を行い、EXEファイル(インポートテーブルにリストされているDLL)をロードし、EXEの開始アドレスで指定された関数を呼び出します。その関数が返ってくると、NTDLLはNtTerminateProcess
を呼び出し、実行中のすべてのスレッドを強制終了し、プロセスを閉じます。
このEXE起動プロセスは、ユーザーモードのデバッガでは理解しにくい場合があります。デバッガの中にはプロセス初期化の初期段階で壊れてしまうものがあります。