【问题标题】:"The Ordinal 112 could not be located in dynamic link library..."“Ordinal 112 无法位于动态链接库中……”
【发布时间】:2016-03-22 19:29:17
【问题描述】:

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

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

【问题讨论】:

  • 是的,这意味着 DLL 的版本不匹配。您可能可以获得静态链接的版本,或者将正确版本的 DLL 放在与其相同的目录中?
  • 你好 Rup,我可以通过重新安装 OpenSSL 程序来让它工作,但是将 ddl 保存到本地 bin 文件夹中,而不是 Windows 系统目录中

标签: windows ssl dll openssl ordinal


【解决方案1】:

“无法在动态链接库中找到序数 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

以下是文件的头部 cmets:

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

【讨论】:

    【解决方案2】:

    使用 OpenSSL 1.0.2g 时遇到同样的问题 - 缺少的函数是“SSLv2_client_method”(113,缺少的序号消息似乎是一个接一个)。

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

    • 禁用 SSLv2 默认构建、默认协商和弱密码。 SSLv2 默认在构建时禁用。未配置“enable-ssl2”的构建将不支持 SSLv2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-09
      • 2018-09-23
      • 2015-01-13
      • 1970-01-01
      • 2010-12-07
      • 2018-08-13
      • 2011-09-04
      相关资源
      最近更新 更多