ul_reason_for_call の呼ばれるタイミング
L77F8567D:
push [ebp+08h]
push DLL_PROCESS_ATTACH(00000001h)
push [esi+18h] //HInstance
push edi //Entry Point
call SUB_L77F88058
: |
L77F8AA58:
push 00000000h
push DLL_THREAD_ATTACH(00000003h)
push [esi+18h] //HInstance
push [ebp-20h] //Entry Point
call SUB_L77F88058
jmp L77F8AA09
|
L77F8AB19:
cmp byte ptr [L77FCF030],00h
jnz L77F8AB2F
push 00000000h
push DLL_THREAD_DETACH(00000002h)
push [esi+10h] //HInstance
push ebx //Entry Point
call SUB_L77F88058
|
L77F8A971:
push 00000001h
push DLL_PROCESS_DETACH(00000000h)
push [esi+18h] //HInstance
push [ebp-20h] //Entry Point
call SUB_L77F88058
jmp L77F8A92B
|
NTDLL内に該当の処理があって、そこでDLLを一つロードするたびにこの関数が呼び出される様です。
なので、この関数が処理される前にTls を初期化するのが必要という訳ですね ・ω・
ちなみに、 DllMain呼び出しの第3パラメータは、Tls Callback 周りの処理に使われるみたいです
DLL_PROCESS_ATTACHのコールスタック
NTDLL! 77f88058() NTDLL! 77f8568b() NTDLL! 77f8449a() <-proc load NTDLL! 77f83a01() NTDLL! 77f91b93() NTDLL! 77f88058() NTDLL! 77f8568b() NTDLL! 77f8d483()<-dll load NTDLL! 77f85b43() KERNEL32! 77e7034b |
Comments