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