首页 文章

“Ordinal 112无法位于动态链接库......”

提问于
浏览
1

整个错误如下:“序号112不能位于动态链接库D:\ GNU-C-compiler \ GNUstep \ bin \ openssl.exe”

我一直在网上搜索很多解决方案无济于事 . 我最近开始使用OpenSSL进行加密,但是在安装过程中我安装了多个不同版本的软件进行测试,但在删除这些其他版本时我只是删除了文件夹,而不是执行正确的卸载程序(openssl程序节省了一些dll进入windows系统目录,因此保留了这些多个dll) . 因此,我相信这些额外的DLL是问题的根源(也许),但我无法找到一种方法轻松卸载它们,所以我要求合理的解决这个问题 .

2 回答

  • -1

    “Ordinal 112无法位于动态链接库......”

    我从OpenSSL 1.0.2推测它的 SSLv23_server_methodBN_MONT_CTX_free ;或者来自OpenSSL 1.1.0的 RSA_PSS_PARAMS_freeSSL_CONF_CTX_clear_flags . 基于最近的一些变化,我猜它的OpenSSL 1.0.2和 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
    ...
    

    您需要使用dumpbinDependency Walker进行验证 . 另请参阅Stack Overflow上的How can I find the exported function name from ordinal (export by ordinal)? .


    序数是使用 <openssl src>\util\mkdef.pl 创建的 . 您可以从OpenSSL的GitHub存在中看到源代码 . Here is 1.0.2here is 1.1.0 .

    以下是该文件的头部注释:

    #!/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.
    
  • -1

    使用OpenSSL 1.0.2g时遇到同样的问题 - 缺少的功能是“SSLv2_client_method”(113,丢失的序数消息似乎是一个一个) .

    1.0.2f和1.0.2g之间的变化[2016年3月1日]

    • 禁用SSLv2默认构建,默认协商和弱密码 . 默认情况下,SSLv2在构建时被禁用 . 未使用"enable-ssl2"配置的构建将不支持SSLv2 .

相关问题