黒翼猫はWin9x で動くOpenSSL 1.1.0を作れるか?その4
黒翼猫はWin9x で動くOpenSSL 1.1.0を作れるか?その1
黒翼猫はWin9x で動くOpenSSL 1.1.0を作れるか?その2
openssl.c をいじくってトレースしてみることにしました
1. init.c の処理
typedef BOOL (WINAPI *GMHEx)(DWORD dwFlags, LPCTSTR lpModuleName, HMODULE* phModule); GMHEx PICSAC=NULL; HINSTANCE hDll=GetModuleHandleA("kernel32.dll"); if(hDll){ PICSAC=(GMHEx)GetProcAddress(hDll,"GetModuleHandleExA"); } if(PICSAC) { ret = PICSAC(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS | GET_MODULE_HANDLE_EX_FLAG_PIN, (void *)&base_inited, &handle); } else { ret = NULL; } |
こういう処理にしていたのだけど、GetModuleHandleEx が存在しなかった場合に ret に NULL 入れると、異常終了扱いになってしまうことが判明したので TRUE を返すことにしました。
結果
OPENSSL_Uplink(006EB360,08): no host application |
が返ってきて異常終了してしまうようになりました。
2. OPENSSL_Uplink: no host application
さらに追ってみると、
bio_in = dup_bio_in(FORMAT_TEXT); bio_out = dup_bio_out(FORMAT_TEXT); bio_err = dup_bio_err(FORMAT_TEXT); |
Windows 95 ではこの部分が正常に実行できなくて終了してしまうようだ。
ここからはトレースが不能に…
うにゅー (・ω・) 。o (これは困った)
ちなみに、この関数3つ消すと… OpenSSL 1.1.1c が Windows 95 で起動しました
Comments