Отладить после смерти дескриптор dlopen()?

У меня есть corefile и я хочу отладить дескриптор, возвращенный dlopen() Например, убедитесь, что он все еще не поврежден. dlsym() функция, вызванная на дескриптор, указывает this=0x0 в трассировке стека. Есть ли описание того, что стоит за dlopen() справиться? Или я должен проверить libdl.so исходный код?

2 ответа

Dlopen возвращается NULL если не удалось найти или загрузить библиотеку (в этом случае вам больше ничего не нужно отлаживать) или указатель на link_map структура данных, которая определена в публичном заголовке Glibc link.h (см. это, например).

dlopen(3) может потерпеть неудачу и дает NULL в таком случае. И вы всегда должны проверять такой провал (см. Это). Я думаю, что некоторые dlopen не удалось в вашем случае, но вы забыли проверить его (это может объяснить this=0 сообщает gdb в dlsym). Тем не менее, в Linux вы могли бы сделать много сотен тысяч успешных dlopen-s, посмотрите мой пример manydl.c. Конечно, вы не должны использовать dlsym(3) с NULL дескриптор общего объекта (в противном случае это неопределенное поведение с вероятной ошибкой сегментации).

Чтобы найти, в частности, для Linux, по какому-либо адресу, к какой функции он может принадлежать, вы можете использовать dladdr (3).

Обратите внимание, что файлы core (5) знают о mmapсегменты памяти (если, возможно, они неполные, потому что вы достигли некоторого предела, установленного с помощью setrlimit (2), используя RLIMIT_CORE)

Смотрите также proc (5). Если вы можете воспроизвести вашу ошибку в каком-то процессе 1234, посмотрите на /proc/1234/maps пока этот процесс еще активен.

Есть ли где-нибудь описание того, что скрывается за ручкой dlopen ()?

Это некоторый абстрактный тип данных (используется только с dlopen, dlsym, dlclose и dlinfo (3)... см. также dl_iterate_phdr (3).), поэтому переносимые программы не должны заботиться. Конечно, вы можете изучить реализацию dlopen например, внутри исходного кода GNU libc. Смотрите также вашу систему /usr/include/link.h И его struct link_map (благодаря комментарию yugr)

Другие вопросы по тегам