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: