5

PE ファイル (PE/COFF) の要件は何ですか? Windows 上で「実行」できるようにするために最低限必要なフィールドと値を設定する必要があります (つまり、エラーなしで「ret」命令を実行してから閉じる)。

私が最初に構築しているライブラリはリンカです: 今、私が抱えている問題は PE ファイル (PE/COFF) です。自分のプラットフォームで実際に実行する前に、PE ファイルに何が「必要」なのかわかりません。私のテスト プラットフォームは Vista です。ダブルクリックして実行すると、「これは有効な Win32 実行可能ファイルではありません」というエラー メッセージが表示され、「アクセスが拒否されました」と表示されます。CLI cmdで実行する場合。.text と .data の 2 つのセクションがあります。

MSDN やその他のサードパーティのドキュメントなど、いくつかのオンライン ドキュメントで提供されている PE ヘッダーを実装しました。hex-editor を使用すると、通常の PE ファイルのように見えます。インポートも IAT も、PE ヘッダーのディレクトリも使用しません。

編集:インポート テーブルを追加しましたが、まだ有効な .exe ファイルではありません、と Windows は言います。最小の PE ファイル ガイドにも記載されている値を使用しようとしました。運がない。本当に私が理解できないように見える唯一のことは、何が必要で何が必要でないかです. 一部のガイドはすべてが必要であると言っていますが、他のガイドは減価償却について言っています:そしてそれはゼロになる可能性があります.

これで十分な情報だと思います。前もって感謝します。


現在の PE ヘッダーの生データ (要求に応じて):

4D 5A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 00 50 45 00 00 4C 01 02 00 C8 7A 55 4B 00 00 00 00 00 00 00 00 E0 00 82 01 0B 01 0D 25 00 10 00 00 00 10 00 00 00 00 00 00 00 10 00 00 00 10 00 00 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00 01 00 0B 00 00 00 00 00 03 00 0A 00 00 00 00 00 00 22 00 00 38 01 00 00 00 00 00 00 03 00 00 00 00 40 00 00 00 40 00 00 00 40 00 00 00 40 00 00 00 00 00 00 0E 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2E 74 65 78 74 00 00 00 00 00 00 00 00 10 00 00 00 02 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 2E 69 64 61 74 61 00 00 00 00 00 00 00 20 00 00 00 02 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3C 20 00 00 00 00 00 00 00 00 00 00 24 20 00 00 34 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 4B 45 52 4E 45 4C 33 32 2E 64 6C 6C 00 00 00 00 01 00 00 80 00 00 00 00 01 00 00 80 00 00 00 00
4

5 に答える 5

2

何をしようとしているのかは、使用しているWindowsのバージョンによって異なります。たとえば、Windows 2000でのPEファイルの読み取り方法は、Windows7での読み取り方法とは異なります。私はOSXユーザーですが、使用しているWindows 7では、Windows2000以前で機能する方法でPEファイルを操作できません。XPまたはVista(または2000とWin7の間の他のもの)をテストして、WindowsがPEの読み取りを開始した時期を確認していません。Windows 7では、MS-DOSヘッダーとスタブのメモリのすべてのビットが無視されます。重要なのは、「マジックナンバー」(「MZ」に等しいWORD)とPEヘッダーのメモリ内の場所を定義するDWORDであるPEオフセットの2つだけです。WindowsがMS-DOSヘッダーとスタブ内の他のすべての値を100%無視するかどうかはわかりませんが、

Windows 2000以前では、上記の内容が正しいかどうかはわかりませんが、PEオフセット値がまだPEヘッダーを見つけるためにメモリ内の正しい場所を指しています。Windows 7では、MS-DOSスタブの長さを変更すると、PEオフセットが正しい変更された場所を指している場合でも、Windowsはexeを実行せず、有効なWin32アプリケーションではないと主張します。

4D 5A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

これは、有効で機能している実行可能ファイルを保持しながら、PEファイルのMS-DOS部分がWindows7で持つことができる最小の部分です。そのビットを短くすることはできません。

これがいくつかのことをクリアすることを願っています。

于 2010-03-27T01:35:58.033 に答える
2

これは、貼り付けを16進エディタにコピーするのは非常に面倒なので、残念ながら、すぐに賢すぎることは何も言えません。

PEファイルの注意事項:DOSヘッダーが有効であることを確認してください。IMAGE_OPTIONAL_HEADERが適切にフォーマットされていることを確認してください。これは、その名前にもかかわらず、Windowsはそれが適切に行われないことを本当に好まないためです。

詳細については、MS形式のほかに、私が知っているPE形式の最高の自作ガイドの1つであるpe.txtを検索してください。

バイトだけを投稿できれば、それを自分のPEパーサーに入れて、さらに役立つかどうかを確認できます。

于 2010-01-17T19:49:41.060 に答える
2

小さな PE 実行可能ファイルの作成に関するこの記事は興味深いかもしれません。特に、Win2k ローダーには KERNEL32.DLL をインポートする必要があると記載されているため、調査する価値があるかもしれません。

于 2010-01-19T00:12:40.443 に答える
1

.NET 2.0 IL Assembler のような本を試すことができます。この本には、PE 形式の実行可能ファイルがどのようなものか (および .Net PE がどのようなものか) を説明する章全体があります。

PE ファイル リーダーを使用して PE ファイルを読み込んで、結果を調べることもできます。PE リーダーが PE で苦労している場合は、何が失敗しているかを示しています。

これは、私が作成したPE ファイル読み取り DLLです (ソース付き)。それを使用する GUI (ソース付き) もあります。

ソースは完全にオープン ソース (GPL によって妨げられていない) であるため、バージョンをクローズすることを含め、必要なことを行うことができます (完全にオープンになるのを妨げる GPL を適用することを除く)。

于 2010-03-12T10:33:12.113 に答える
0

Microsoft PE/COFF 仕様は、私が知っている唯一の仕様です。

于 2010-01-17T19:33:51.620 に答える