“The Ordinal 112 could not be located in dynamic link library…”

后端 未结 2 1706
长情又很酷
长情又很酷 2020-12-20 07:33

The Whole Error is as follows: \" The ordinal 112 could not be located in the dynamic link library D:\\GNU-C-compiler\\GNUstep\\bin\\openssl.exe \"

i\'ve been search

相关标签:
2条回答
  • 2020-12-20 07:53

    “The Ordinal 112 could not be located in dynamic link library…”

    I'm speculating its SSLv23_server_method or BN_MONT_CTX_free from OpenSSL 1.0.2; or RSA_PSS_PARAMS_free or SSL_CONF_CTX_clear_flags from OpenSSL 1.1.0. Based on some recent changes, I'm guessing its OpenSSL 1.0.2 and SSLv23_server_method.

    # OpenSSL 1.1.0
    $ find $PWD -type f -iname '*.num' -exec grep " 112" {} \;
    RSA_PSS_PARAMS_free                     112 1_1_0   EXIST::FUNCTION:RSA
    SSL_CONF_CTX_clear_flags                112 1_1_0   EXIST::FUNCTION:
    ...
    
    # OpenSSL 1.0.2
    $ find $PWD -type f -iname '*.num' -exec grep " 372" {} \;
    BN_MONT_CTX_free                        112 EXIST::FUNCTION:
    SSLv23_server_method                    112 EXIST::FUNCTION:RSA
    ...
    

    You will need to verify it by using dumpbin or Dependency Walker. Also see How can I find the exported function name from ordinal (export by ordinal)? on Stack Overflow.


    The ordinals are created using <openssl src>\util\mkdef.pl. You can see the source code from OpenSSL's GitHub presence. Here is 1.0.2 and here is 1.1.0.

    Here are the head comments for the file:

    #!/usr/local/bin/perl -w
    #
    # generate a .def file
    #
    # It does this by parsing the header files and looking for the
    # prototyped functions: it then prunes the output.
    #
    # Intermediary files are created, call libcrypto.num and libssl.num,
    # The format of these files is:
    #
    #   routine-name    nnnn    vers    info
    #
    # The "nnnn" and "vers" fields are the numeric id and version for the symbol
    # respectively. The "info" part is actually a colon-separated string of fields
    # with the following meaning:
    #
    #   existence:platform:kind:algorithms
    #
    # - "existence" can be "EXIST" or "NOEXIST" depending on if the symbol is
    #   found somewhere in the source, 
    # - "platforms" is empty if it exists on all platforms, otherwise it contains
    #   comma-separated list of the platform, just as they are if the symbol exists
    #   for those platforms, or prepended with a "!" if not.  This helps resolve
    #   symbol name variants for platforms where the names are too long for the
    #   compiler or linker, or if the systems is case insensitive and there is a
    #   clash, or the symbol is implemented differently (see
    #   EXPORT_VAR_AS_FUNCTION).  This script assumes renaming of symbols is found
    #   in the file crypto/symhacks.h.
    #   The semantics for the platforms is that every item is checked against the
    #   environment.  For the negative items ("!FOO"), if any of them is false
    #   (i.e. "FOO" is true) in the environment, the corresponding symbol can't be
    #   used.  For the positive itms, if all of them are false in the environment,
    #   the corresponding symbol can't be used.  Any combination of positive and
    #   negative items are possible, and of course leave room for some redundancy.
    # - "kind" is "FUNCTION" or "VARIABLE".  The meaning of that is obvious.
    # - "algorithms" is a comma-separated list of algorithm names.  This helps
    #   exclude symbols that are part of an algorithm that some user wants to
    #   exclude.
    
    0 讨论(0)
  • 2020-12-20 07:54

    Had the same problem using OpenSSL 1.0.2g - the missing function was "SSLv2_client_method" (113, the missing ordinal message seems to be off-by-one).

    Changes between 1.0.2f and 1.0.2g [1 Mar 2016]

    • Disable SSLv2 default build, default negotiation and weak ciphers. SSLv2 is by default disabled at build-time. Builds that are not configured with "enable-ssl2" will not support SSLv2.
    0 讨论(0)
提交回复
热议问题