7

私は DOS ヘッダーを深く理解しようとしていますが、これらのヘッダーで立ち往生しています。必要なバイトは MZ 署名と PE セクションへのポインターだけであることはわかっていますが、これら 2 つが正確​​に何であるかを知る必要があります。

USHORT e_cblp;          // Bytes on last page of file
USHORT e_cp;            // Pages in file

ほとんどの実行可能ファイルのバイナリ コードでは、これらの値はそれぞれ 90h と 03h です。1 ページは 512 バイトのコードなので、3 ページありますが、どこにあるのでしょうか。ファイルのどこでそれらを見つけることができますか? 512 バイトの最後のページでこれらの 90h (144) バイトを特定するにはどうすればよいですか?

この情報は、DOS によってのみ要求されます。DOS で実行される PE ファイルの唯一のコードは DOS スタブであり、3 ページのコードではなく、わずか 64 バイトです。では、90h と 03h はそこで何をしなければならないのでしょうか? e_cblp=01hとしか言えませんe_cp=DOS header+DOS stubか?

4

2 に答える 2