Question

J'ai une bibliothèque d'origine douteuse qui est identifiée par file comme un exécutable 32 bits. Cependant, lorsque je tente de dlopen sur un 32 bits CentOS 4.4 machine se termine dlopen avec SIGFPE. Certes, il y avait quelque chose de mal avec le format du fichier binaire alors dlopen doit être une erreur de manipulation?

La question est: Quels types de problèmes peuvent causer dlopen à émettre SIGFPE

Était-ce utile?

La solution

Quelques raisons possibles sont:

  1. Division par zéro (règle avec cette gdb)
  2. inadéquation Architecture (avez-vous compilez le DSO-vous sur la même architecture? Ou est-il préconstruits?)
  3. problèmes de compatibilité avec l'ABI (le chargement d'un ASM construit pour une distribution Linux sur un autre).

Ici est une discussion intéressante en ce qui concerne la génération de hachage dans le format ELF dans les systèmes GNU où un décalage ABI peut provoquer SIGFPE sur les systèmes lorsque vous mélangez et DSO match ne repose pas sur ce distro / système.

Exécuter GDB contre votre exécutable avec:

]$ gdb ./my_executable
(gdb) run

Lorsque le programme se bloque, obtenir un backtrace avec

(gdb) bt

Si les extrémités de la pile dans do_lookup_x () alors vous avez probablement le même problème et veiller à votre DSO est correct pour le système que vous essayez de le charger sur ... Cependant, vous dites qu'il a origines douteuses le problème est probablement un problème ABI similaire à celui décrit.

Obtenir une bibliothèque non douteuse / exécutable! ;)

Bonne chance

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top