Вопрос

У меня есть библиотека сомнительного происхождения, которая идентифицируется file как 32 бит исполняемый файл. Однако, когда я пытаюсь dlopen Это на 32-битной машине CentOS 4.4, Dlopen завершается с SIGFPE. Отказ Конечно, если что-то не так с форматом двоина, то dlopen следует обрабатывать ошибку?

Таким образом, вопрос в том, какие проблемы могут вызвать DLOPEN EMIT SIGFPE?

Это было полезно?

Решение

Некоторые возможные причины:

  1. Разделение на ноль (заправить это с GDB)
  2. Несоответствие архитектуры (вы скомпилировали DSO сами по той же архитектуре? Или это пребуждено?)
  3. Проблемы совместимости ABI (загрузка DSO, построенного для одного дистрибутива Linux на другой).

Здесь Является ли интересным дискуссией в отношении генерации HASH в формате эльфа в системах GNU, где несоответствие ABI может вызвать SIGFPE на системах, когда вы смешиваете и сопоставляете DSO, не созданные на этом дистрибутиве / системе.

Запустите GDB на ваш исполняемый файл с:

]$ gdb ./my_executable
(gdb) run

Когда программа сбивает, получите обратный номер с

(gdb) bt

Если стек заканчивается в do_lookup_x () тогда вы, вероятно, имеете ту же проблему и должны убедиться, что ваш DSO правильный для системы, которую вы пытаетесь загрузить ее ... Однако вы говорите, что у него есть сомнительное происхождение Таким образом, проблема, вероятно, проблема ABI, аналогичной описанной.

Получить некушенную библиотеку / исполняемый файл! ;)

Удачи

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top