PHP 5.6 Alpha 3 を Windows 2000で動かす実験 その1
PHP For Windows: Binaries and sources QA Releases
Windows 版の PHP 5.6 Alpha 3 のバイナリが公開されたので、魔改造版のWindows 2000で動作するかテストしてみました。
<?php echo 'Current PHP version: ' . phpversion(); ?> |
ソースは前回と同じ
C:\php-5.6.0alpha3-Win32-VC11-x86>php phptest.php Current PHP version: 5.6.0alpha3 C:\php-5.6.0alpha3-Win32-VC11-x86> |
問題なしです。
ただし、1つ動かないモジュールがありました。
php_sockets.dll
iphlpapi.dll の if_nametoindex
ws2_32.dll の WSASendMsg
を参照していました。
んん、両方 Vista 以降に実装された関数ですね。
ちょっとどうするか考えてみることにします
if_nametoindex: push ebp mov ebp,esp sub esp,0000000Ch and dword ptr [ebp-04h],00000000h lea eax,[ebp-0Ch] push eax push [ebp+08h] call ConvertInterfaceNameToLuidA test eax,eax jz L4AD118C5 xor eax,eax jmp L4AD118DB L4AD118C5: lea eax,[ebp-04h] push eax lea eax,[ebp-0Ch] push eax call ConvertInterfaceLuidToIndex neg eax sbb eax,eax not eax and eax,[ebp-04h] L4AD118DB: leave retn 0004h |
ConvertInterfaceNameToLuidA も ConvertInterfaceLuidToIndex も無いのだよ
WSASendMsg: mov edi,edi push ebp mov ebp,esp sub esp,00000020h push esi xor esi,esi cmp dword ptr [L4B0F504C],L4B0D3084 mov [ebp-08h],esi jnz L4B0EA55A cmp [L4B0F5070],esi jz L4B0EA55A mov [ebp-04h],esi jmp L4B0EA566 L4B0EA55A: call SUB_L4B0D60C7 cmp eax,esi mov [ebp-04h],eax jnz L4B0EA572 L4B0EA566: cmp [ebp+08h],esi jnz L4B0EA583 mov dword ptr [ebp-04h],00002726h L4B0EA572: push [ebp-04h] call [KERNEL32.dll!SetLastError] or eax,FFFFFFFFh L4B0EA57E: pop esi leave retn 0018h ;------------------------------------------------------------------------------ L4B0EA583: push esi push esi lea eax,[ebp-08h] push eax push 00000004h lea eax,[ebp-0Ch] push eax push esi push esi push 4800001Bh push [ebp+08h] call WSAIoctl cmp eax,FFFFFFFFh jnz L4B0EA5AE call [KERNEL32.dll!GetLastError] mov [ebp-04h],eax jmp L4B0EA572 L4B0EA5AE: mov eax,[ebp+0Ch] mov [ebp-20h],eax mov eax,[ebp+10h] mov [ebp-1Ch],eax mov eax,[ebp+14h] mov [ebp-18h],eax mov eax,[ebp+18h] push esi mov [ebp-14h],eax mov eax,[ebp+1Ch] push esi mov [ebp-10h],eax lea eax,[ebp-08h] push eax push 00000004h lea eax,[ebp-04h] push eax push 00000014h lea eax,[ebp-20h] push eax push C8000020h push [ebp-0Ch] call WSAIoctl cmp [ebp-04h],esi jnz L4B0EA572 xor eax,eax jmp& nbsp; L4B0EA57E SUB_L4B0D60C7: |
こちらの実装は比較的楽そう
よろしければXP用も作っていただきたいです。
わくわく。