12

私はいくつかのかなり低レベルのものをいじって、CorFlags.exeユーティリティで異なる出力を取得する理由を特定しようとしています。参考までに、出力は次のとおりです。

$ corflags test2.exe
Microsoft(R).NETFrameworkCorFlags変換ツール。バージョン4.0.30319.17929
Copyright(c)MicrosoftCorporation。全著作権所有。

バージョン:v4.0.30319
CLRヘッダー:2.5
PE:PE32
CorFlags:0x1
ILONLY:1
32BITREQ:0
32BITPREF:0
署名済み:0

$ corflags test.exe
Microsoft(R).NETFrameworkCorFlags変換ツール。バージョン4.0.30319.17929
Copyright(c)MicrosoftCorporation。全著作権所有。

バージョン:v4.0.30319
CLRヘッダー:2.5
PE:PE32
CorFlags:0x20003
ILONLY:1
32BITREQ:0
32BITPREF:1
署名済み:0

CorFlagsユーティリティで公開されていないCorFlags値の他のビットが何を意味するのかを理解しようとしています。これについての参照はどこにありますか?

4

2 に答える 2

14

実際には、PE32ヘッダー(PEフィールド)とアセンブリに埋め込まれたマニフェストのヘッダー(残り)からの情報がブレンドされています。これはすべてWindowsSDKで説明されており、新しい32BITPREFフラグを取得するにはバージョン8が必要です。C:\ Program Files(x86)\ Windows Kits \ 8.0 \ Include \ um \ CorHdr.hを使用します。このファイルには、宣言を説明する多くのコメントがあります。

IMAGE_COR20_HEADER.Flagsの値を説明するセクションをコピーします。

COMIMAGE_FLAGS_ILONLY               =0x00000001,
COMIMAGE_FLAGS_32BITREQUIRED        =0x00000002,
COMIMAGE_FLAGS_IL_LIBRARY           =0x00000004,
COMIMAGE_FLAGS_STRONGNAMESIGNED     =0x00000008,
COMIMAGE_FLAGS_NATIVE_ENTRYPOINT    =0x00000010,
COMIMAGE_FLAGS_TRACKDEBUGDATA       =0x00010000,
COMIMAGE_FLAGS_32BITPREFERRED       =0x00020000,

したがって、表示される値0x20003は、32BITPREFERRED(0x20000)+ 32BITREQUIRED(0x00002)+ ILONLY(0x00001)に分類されます。

于 2012-12-07T16:57:34.313 に答える
2

フラグの解釈:

任意のCPU:PE=PE32および32BIT=0

x86:PE=PE32および32BIT=1

64ビット:PE =PE32+および32BIT=0

于 2013-09-04T08:02:45.027 に答える