ステラナビゲータ10のGetIfTable2の意味を解析してみた

ステラナビゲータ10のnavcom.dllでは Vista 以降に追加された GetIfTable2 を使っています。
これの意味について手動で逆コンパイルして、解析してみました

 L10006334:
          lea    eax,[ebp-20h]
          push    eax
          xor    edi,edi
          call    jmp_IPHLPAPI.DLL!GetIfTable2
          test    eax,eax
          jnz    L10006391
          lea    ecx,[ebp-24h]
          call    [mfc110u.dll!mfc110u.296]
          mov    eax,[ebp-20h]
          xor    edx,edx
          mov    esi,[eax]
          test    esi,esi
          jz     L10006388
          add    eax,00000488h
          lea    esp,[esp+00h]
 L10006360:
          test    byte ptr [eax],05h
          jz     L10006377
          cmp    dword ptr [eax-18h],00000018h
          jz     L10006377
          cmp    dword ptr [eax+0Ch],00000001h
          jnz    L10006377
          cmp    dword ptr [eax+04h],00000001h
          jz     L10006383
 L10006377:
          inc    edx
          add    eax,00000548h
          cmp    edx,esi
          jc     L10006360
          jmp    L10006388
 L10006383:

これが逆アセンブルの結果

 L10006334:
MIB_IF_TABLE2 *IFT2;//          lea    eax,[ebp-20h]
          push    IFT2
          xor    edi,edi
          call    [GetIfTable2]
          test    eax,eax
          jnz    FailFunction
          lea    ecx,[ebp-24h]
          call    [mfc110u.dll!mfc110u.296]
          mov    eax,IFT2
          xor    edx,edx
          mov    esi,[IFT2]
          test    esi,esi
          jz     IFT2isNull
          add    eax,offset InterfaceAndOperStatusFlags
          lea    esp,[esp+00h]
 L10006360:
          test    byte ptr [eax],(HardwareInterface | ConnectorPresent)
          jz     L10006377
          cmp    dword ptr [Type],00000018h
          jz     L10006377
          cmp    dword ptr [MediaConnectState],MediaConnectStateConnected
          jnz    L10006377
          cmp    dword ptr [OperStatus],IfOperStatusUp
          jz     L10006383
 L10006377:
          inc    edx
          add    eax,sizeof(MIB_IF_ROW2)
          cmp    edx,esi
          jc     L10006360
          jmp    L10006388
 L10006383:

簡単に逆コンパイル

こんな感じで、インターフェイスが有効かどうかチェックしてるようですね

おすすめ

1件の返信

  1. ななし より:

    9も同じ関数使われていたような

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です