PE ファイルとしてみたアセンブリ [合致+2][異種+4]
PE ファイルの構成については詳しくない*1んだけども、.NET のアセンブリは PE ファイルとしてみると、
- ヘッダ部のフラグ設定が異なる
- スタートアップルーチンが少し特殊
- .TEXT セクションがない(リソース DLL のように)
- .CLR セクションが配置されている
といったところが代表的な違いだが、このような構造をもつ .NET アセンブリは、まるでクラシカル DLL であるかのように LoadLibrary 系の API によって読み込むこともできる。
上記をふまえて、
- .NET アセンブリは .TEXT セクションを持つことができるか?
- .NET アセンブリは exports を持つことができるか?
- クラシカル DLL は、.CLR セクションを持つことができるか?
- .NET アセンブリのスタートアップルーチンをクラシカル DLL から呼び出せるか?
という点について確認してみると、すべてが YES である。これは、とても面白い DLL ファイルが作成できることを意味していて、すでにそのような DLL の作成をサポートするツールも存在する。
後日へ続く
*1:なら書くなよ、と思わなくもないほど