手元でビルドした、Thunderbird 3.0 x64が終了時に自分自身を起動してくれるという倒れそうなバグがなんかあって、調べてみたところ、
0:000> u 00000001`3f508afd
thunderbird!XRE_main+0x190d [c:\workspace\mozilla-hg\comm-1.9.1\mozilla\toolkit\xre\nsapprunner.cpp @ 3369]:
00000001`3f508afd ff5028 call qword ptr [rax+28h]
00000001`3f508b00 39ac2498000000 cmp dword ptr [rsp+98h],ebp ; [rsp + 0x98] -> needRestart, @ebp -> 1
00000001`3f508b07 0f8491010000 je thunderbird!XRE_main+0x1aae (00000001`3f508c9e)
00000001`3f508b0d 85f6 test esi,esi
00000001`3f508b0f 7414 je thunderbird!XRE_main+0x1935 (00000001`3f508b25)
00000001`3f508b11 488b0dd0b51301 mov rcx,qword ptr [thunderbird!gSavedVars+0x8 (00000001`406440e8)]
00000001`3f508b18 4885c9 test rcx,rcx
00000001`3f508b1b 743b je thunderbird!XRE_main+0x1968 (00000001`3f508b58)
00000001`3f508b1d ff15e553cc00 call qword ptr [thunderbird!_imp_PR_SetEnv (00000001`401cdf08)]
00000001`3f508b23 eb33 jmp thunderbird!XRE_main+0x1968 (00000001`3f508b58)
00000001`3f508b25 488d0d14a1cc00 lea rcx,[thunderbird!kProfileManagerURL+0xd40 (00000001`401d2c40)]
00000001`3f508b2c ff15ce53cc00 call qword ptr [thunderbird!_imp_PR_GetEnv (00000001`401cdf00)]
00000001`3f508b32 4885c0 test rax,rax
00000001`3f508b35 7414 je thunderbird!XRE_main+0x195b (00000001`3f508b4b)
00000001`3f508b37 403828 cmp byte ptr [rax],bpl
00000001`3f508b3a 740f je thunderbird!XRE_main+0x195b (00000001`3f508b4b)
0:000> r @ebp
ebp=1
0:000> x
00000000`002ffc40 argc = 0
00000000`002ffc48 argv = 0x00000000`00000001
00000000`002ffc50 aAppData = 0x00000000`01f232b0
00000000`002ff8e0 localIniFile = class nsCOMPtr
00000000`002ff9a0 appData = class ScopedAppData
00000000`002ff8d0 rv = 0
00000000`002ff8d8 iniFile = class nsCOMPtr
00000000`002ff968 parser = class nsINIParser_internal
00000000`002ff8f8 overrideLF = class nsCOMPtr
00000000`002ff910 greDir = class nsCOMPtr
00000000`002ff8f8 lf = class nsCOMPtr
00000000`002ff950 osABI = class nsDependentCString
00000000`002ff938 needsRestart = 0
:
:
というか、@ebpが0のつもりで生成してる気がするんだけど、1だし。
Visual Studio 2005のx64コンパイラってOxとか02とかの最適化オプション使うと不思議なコードをたくさん生成してくれるんだけど、2005のx64コンパイラ使う気失せた。2008も0xだと変なコード吐くんだよな。。。