【发布时间】:2011-02-11 11:15:07
【问题描述】:
我有一个来源可疑的库,由 file 标识为 32 位可执行文件。但是,当我在 32 位 CentOS 4.4 机器上尝试 dlopen 时,dlopen 以 SIGFPE 终止。当然,如果二进制文件的格式有问题,那么dlopen 应该处理错误?
所以问题是:什么样的问题会导致 dlopen 发出 SIGFPE?
【问题讨论】:
我有一个来源可疑的库,由 file 标识为 32 位可执行文件。但是,当我在 32 位 CentOS 4.4 机器上尝试 dlopen 时,dlopen 以 SIGFPE 终止。当然,如果二进制文件的格式有问题,那么dlopen 应该处理错误?
所以问题是:什么样的问题会导致 dlopen 发出 SIGFPE?
【问题讨论】:
一些可能的原因是:
Here 是关于在 GNU 系统中以 ELF 格式生成哈希的有趣讨论,其中 ABI 不匹配可能导致系统上出现 SIGFPE,当您混合和匹配不是在该发行版/系统上构建的 DSO 时。
对您的可执行文件运行 GDB:
]$ gdb ./my_executable
(gdb) run
当程序崩溃时,获取回溯
(gdb) bt
如果堆栈以do_lookup_x () 结尾,那么您可能会遇到同样的问题,并且应该确保您的 DSO 对于您尝试加载它的系统是正确的......但是您确实说它有 可疑来源 所以这个问题可能是一个类似于描述的 ABI 问题。
获取一个可靠的库/可执行文件! ;)
祝你好运
【讨论】: