2010-02-02

kernel32のDLLをdelay-loadできない理由

The Old New Thing : Why can't I use the linker to delay-load a function from kernel32?

delay-loadというのは、APIの呼び出しをひとまず別のダミーの関数にしておく。ダミーの関数は、GetProccAddress()を呼び出して、目的の関数のアドレスを取得する。

さて、DLLをロードするには、LoadLibrary()を呼び出さなければならない。DLLがまだ読み込まれていない場合、ダミーの関数は、DLLを読み込まなければならない。しかし、LoadLibrary()はkernel32のDLLの中にある。したがって、Catch-22問題(意味的には、タマゴが先か、ニワトリが先か)に悩まされるのである。

今回も、Catch-22が出てきた。

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.