En Linux, lo que puede causar dlopen para emitir SIGFPE?
Pregunta
Tengo una biblioteca de origen dudoso que se identifica por file
como un ejecutable de 32 bits. Sin embargo, cuando intento dlopen
en un 32 bits CentOS 4.4 máquina, termina con dlopen SIGFPE
. Sin duda, si había algo mal con el formato del binario entonces dlopen
debe ser el manejo de un error?
Así que la pregunta es: ¿Qué tipo de problemas pueden causar dlopen a SIGFPE emiten
Solución
Algunas razones posibles son:
- La división por cero (descartar esta posibilidad con el BGF)
- Arquitectura desajuste (qué se compila el DSO a sí mismo en la misma arquitectura, o es creado previamente?)
- problemas de compatibilidad ABI (carga de un DSO construida por una distribución de Linux en una diferente).
Aquí es una discusión interesante respecto a la generación de hash en el formato ELF en los sistemas GNU donde un desajuste ABI puede causar SIGFPE en los sistemas cuando se mezclan los partidos y los GRD no edificados que distro / sistema.
Ejecutar GDB en contra de su ejecutable con:
]$ gdb ./my_executable
(gdb) run
Cuando el programa se bloquea, conseguir una traza con
(gdb) bt
Si los extremos de la pila en do_lookup_x ()
entonces es probable que tengan el mismo problema y deben asegurarse de que su DSO es correcto para el sistema que está intentando cargarla en ... Sin embargo lo que diga tiene dudosos orígenes lo que el problema es probablemente un problema de ABI similar a la descrita.
Obtener una biblioteca no dudosa / ejecutable! ;)
Buena suerte