ステラナビゲータ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: |
簡単に逆コンパイル
こんな感じで、インターフェイスが有効かどうかチェックしてるようですね
9も同じ関数使われていたような