IDA Pro 分析 某些Basic Block時有overlap region?

用這條script 分析會出現以下結果
  1. USE32

  2. section .text

  3. global _?_PropagateMessage@CTray@@IAEXPAUHWND__@@IIJ@Z

  4. _?_PropagateMessage@CTray@@IAEXPAUHWND__@@IIJ@Z:
  5.    push    ebp
  6.    mov     ebp, esp
  7.    sub     esp, 10h
  8.    mov     eax, [ebp+0Ch]
  9.    mov     [ebp-10h], eax
  10.    mov     eax, [ebp+10h]
  11.    mov     [ebp-0Ch], eax
  12.    mov     eax, [ebp+14h]
  13.    mov     [ebp-8], eax
  14.    lea      eax,[ebp-10h]
  15.    push    eax
  16.    push    ?PropagateEnumProc@CTray@@KGHPAUHWND__@@J@Z
  17.    push    dword [ebp+8]
  18.    mov     [ebp-4], ecx
  19.    call     dword [__imp__EnumChildWindows@12]
  20.    leave   
  21.    retn    10h
  22. ?PropagateEnumProc@CTray@@KGHPAUHWND__@@J@Z:
  23.    push    esi
  24.    push    dword [esp+8]
  25.    mov     esi, [esp+10h]
  26.    mov     eax, [esi+0Ch]
  27.    push    dword [eax+450h]
  28.    call     dword [__imp__SHIsChildOrSelf@8]
  29.    test     eax,eax
  30.    jz      loc_10199B7
  31.    push    dword [esi+8]
  32.    push    dword [esi+4]
  33.    push    dword [esi]
  34.    push    dword [esp+14h]
  35.    call     dword [__imp__SendMessageW@16]
  36. loc_10199B7:
  37.    xor     eax, eax
  38.    inc     eax
  39.    pop     esi
  40.    retn    8
複製代碼
?PropagateEnumProc@CTray@@KGHPAUHWND__@@J@Z:

不是下一個function/Basic Block嗎?
有冇CHING知?
THX
  1. seg = FirstSeg();
  2.        
  3. while(seg != BADADDR)
  4. {
  5.         start = SegStart(seg);         
  6.                  
  7.         for (addr = NextFunction(start); addr != BADADDR; addr = NextFunction(addr)) {
  8.                 name = Name(addr);
  9.                 end = GetFunctionAttr(addr, FUNCATTR_END);
  10.                 Message("%s:\n", name);
  11.                 DumpFunction(name, addr, end);                             
  12.         }
  13.                
  14.         seg = NextSeg(seg);
  15. }
複製代碼