当前位置:  开发笔记 > 运维 > 正文

在linux上,什么可能导致dlopen发出SIGFPE?

如何解决《在linux上,什么可能导致dlopen发出SIGFPE?》经验,为你挑选了1个好方法。

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

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



1> Aiden Bell..:

一些可能的原因是:

    除以零(用gdb统计这个)

    架构不匹配(您是否在同一架构上自行编译DSO?还是预先构建?)

    ABI兼容性问题(在一个不同的Linux发行版上加载为一个Linux发行版构建的DSO).

以下是关于GNU系统中ELF格式的哈希生成的有趣讨论,当混合和匹配非基于该发行版/系统的DSO时,ABI不匹配可能导致系统上的SIGFPE.

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

]$ gdb ./my_executable
(gdb) run

当程序崩溃时,获取回溯

(gdb) bt

如果堆栈结束do_lookup_x ()然后您可能会遇到相同的问题,并且应该确保您的DSO对于您尝试加载它的系统是正确的...但是您确实说它有可疑的起源因此问题可能是类似于ABI的问题描述的那个.

得到一个不可疑的库/可执行文件!;)

祝好运

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有