PEファイルについて調べてます。
んで、わからないことが数点。
その1:隠しリンカオプション
VC++ 2008のリンカオプションはMSDNに一覧があるが、ここに書かれていないオプションが少なくとも一つある。
/INTEGRITYCHECKというのがそれで、これを指定してリンクすると、PEヘッダのIMAGE_OPTIONAL_HEADER.DllCharacteristicsにIMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITYビットが含まれる。
が、このファイルがどういうわけか実行できない。
このフラグは何のためにあるのだろう?
その2:セクション属性
PEファイル中のセクションの属性は、IMAGE_SECTION_HEADER構造体に含まれる。
こいつのCharacteristicsメンバに含まれるフラグのなかに、意味がよくわからないものがある。
列挙すると、IMAGE_SCN_NO_DEFER_SPEC_EXC、IMAGE_SCN_LNK_NRELOC_OVFL、IMAGE_SCN_MEM_DISCARDABLE、IMAGE_SCN_MEM_NOT_CACHED、IMAGE_SCN_MEM_NOT_PAGEDの5つ。
どれも、ビットが立っているとどういう挙動をするのかがよくわからない。
最初の2つは、どうすればこのビットが立つのかもわからない。
ご存知の方がいらっしゃいましたら、教えてくださると幸いです。
なお、現在、x86とx64アーキテクチャ上での、いわゆるDLLとEXEのみを対象として調べており、他のアーキテクチャ用だとか、「カーネルモードドライバでしか縁のないフラグ」とかには興味がありません。
ので、上に挙げたようなものが、もしそうしたものであったら、詳細なしでも構いません。