黒翼猫は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 で起動しました

おすすめ

コメントを残す

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