3

我有一个来源可疑的库,它被标识file为 32 位可执行文件。但是,当我在 32 位 CentOS 4.4 机器上尝试dlopen它时,dlopen 以SIGFPE. 当然,如果二进制文件的格式有问题,那么dlopen应该处理错误吗?

所以问题是:什么样的问题会导致 dlopen 发出 SIGFPE?

4

1 回答 1

5

一些可能的原因是:

  1. 除以零(用 gdb 排除)
  2. 架构不匹配(您是否在同一架构上自己编译了 DSO?还是预先构建的?)
  3. ABI 兼容性问题(在不同的 Linux 发行版上加载为一个 Linux 发行版构建的 DSO)。

是一个关于在 GNU 系统中以 ELF 格式生成哈希的有趣讨论,当您混合和匹配不是在该发行版/系统上构建的 DSO 时,ABI 不匹配可能会导致系统出现 SIGFPE。

使用以下命令对您的可执行文件运行 GDB:

]$ gdb ./my_executable
(gdb) run

当程序崩溃时,获取回溯

(gdb) bt

如果堆栈结束,do_lookup_x ()那么您可能会遇到同样的问题,并且应该确保您的 DSO 对于您尝试加载它的系统是正确的......但是您确实说它的来源可疑,所以问题可能是类似于 ABI 问题描述的那个。

获取一个可靠的库/可执行文件!;)

祝你好运

于 2010-04-23T10:43:18.867 回答