WineやWindows 2000でカスタムメイド3D2の一部機能が動作しない原因が判明
カスタムメイド3D2エディット体験版をWin2000で安定動作させるパッチ
パッチで無理やりクラッシュを回避する処理を作ったものの、動作しない原因を調べてみました。
Windows 7の D3D11.DLL の D3D11CoreCreateDevice 内の処理に
push 00000003h push L10001370 call D3D11CoreRegisterLayers : L10001370: |
こういうのがあります
L1000F9EC:
: L1000FAC3: |
赤字の関数の処理を追うと、こんな処理が
SUB_L10013354: push 00000014h mov eax,L100738E4 call SUB_L10072FBD mov [ebp-10h],edi push [ebp+08h] and dword ptr [ebp-04h],00000000h lea esi,[edi+40h] push esi mov dword ptr [edi],L1000A63C call SUB_L10015F99 mov eax,[ebp+0Ch] mov dword ptr [esi],L1000A1B8 mov dword ptr [esi+04h],L1000A1A4 mov dword ptr [esi+08h],L1000A0D8 mov dword ptr [esi+14h],L1000A0C4 mov dword ptr [esi+18h],L1000A0A4 mov dword ptr [esi+1Ch],L1000A088 mov dword ptr [esi+20h],L1000A078 mov dword ptr [esi+24h],L1000A064 mov dword ptr [esi+28h],L1000A038 mov dword ptr [esi+2Ch],L1000A028 mov [esi+30h],eax and dword ptr [ebp-14h],00000000h mov [ebp-20h],esi &n bsp; mov dword ptr [ebp-18h],L10064CE1 push [ebp+14h] mov byte ptr [ebp-04h],02h push [ebp+10h] push edi call SUB_L10013300 call SUB_L10017BB0 call SUB_L100730A9 retn 0010h |
ここで、DirectX11の動作モードによって、機能関数を登録するようになっています
この機能関数が WineD3Dの D3D11.dllには存在しないので、呼び出されるとNULLが返ってクラッシュする模様
DLL_Color_CreateByteDataFromTexture: push ebp mov ebp,esp mov ecx,[ebp+08h] test ecx,ecx jz L10004773 mov edx,[ebp+0Ch] test edx,edx jz L10004773 mov eax,[ebp+10h] test eax,eax jz L10004773 push eax call SUB_L100096D0 add esp,00000004h pop ebp retn SUB_L100096D0: |
こんな感じWin7のどこに対応するかと言うと
L1000A0D8: dd L100157EA dd L1001597F dd L100158E9 dd L10018014 dd L100181CC dd L1001842C dd L1001868B dd L1001896D dd L10018C8F dd L10018E99 dd L100190F3 dd L10019BA6 dd L10019318 dd L10019636 dd L1001975F dd L10019937 dd L10019432 dd L10019534 dd L10019A60 dd L10019B62 dd L10019CF7 dd L1001A01B dd L1001A21F dd L1001A4A1 dd L1001A6AC dd L1001A84B dd L1001A8CB dd L1001AA35 dd L1001C02B dd L1001B6BB dd L1001B6DB dd L1001B7F7 dd L1001B818 dd L1001B96F dd L1003017F dd L10015A18 dd L10015A09 dd L100159F0 dd L1001BC70 dd L1001C06B dd L1001C1CF (+0xa0) dd L1001C08D dd L1001C123 dd L1001C1CF dd L100270F4 dd L10027119 dd L10027333 dd L1002756F dd L1001C051 dd L1001C05E dd L1001C13D L1000A1A4: L1001C1CF: |
こうですね・ω・
Comments