リンカーがどのように機能するか、およびリンカーがすべての異なるセクションとセグメントを含む .exe を作成する方法を理解する必要があります。より正確には、16 進エディターを使用して、少なくとも次のコードを含む .exe を作成できるようになりたいと考えています。
int main()
{
}
必要な読み物を教えてください。John Levine の Linkers & Loaders があります。
リンカーがどのように機能するか、およびリンカーがすべての異なるセクションとセグメントを含む .exe を作成する方法を理解する必要があります。より正確には、16 進エディターを使用して、少なくとも次のコードを含む .exe を作成できるようになりたいと考えています。
int main()
{
}
必要な読み物を教えてください。John Levine の Linkers & Loaders があります。
Ian Lance Taylor は、新しい ELF リンカを書きましたgold
。彼は、一連のブログ投稿でリンカーが行う一般的なタスクについて説明しました。
これは、PE リンカーが行うこととは細部が異なりますが、一般的な考え方はすべて同じです (そして、「リンカーとローダー」と同じです。
16進エディタを使用して、少なくとも次のコードを含む.exeを作成できるようになりたい
その場合、なぜリンカーが必要なのかわかりません。PE ファイル形式の説明を読み、必要なヘッダーを作成し、.text
を含む小さなセクションを作成しxor %eax,%eax; ret
、そのセクションへのエントリ ポイントを設定します。
(静的) リンカのしくみ: 必要なすべてのオブジェクト ファイル (モジュール) を取得し、アドレスをマージ/結合/フラット化して、モジュール間の呼び出しが可能で正しくなるようにし、実行可能な形式の要件を満たすようにそれらを構造化し、おそらくリンク時の最適化を行います。
実行可能ファイルを作成するには (ここでは特定の形式について言及していないことに注意してください)、実行可能形式を知っている必要があります。これは通常、ヘッダーとセクション、および必要なスタートアップ コード (コンパイラは通常、これをオブジェクト ファイルとして既に提供しています) で構成されます。プリコンパイル済み)。PE (.exe) ファイルについては、MSDNに適切な説明があります。