C++
Assembler
C
Development for Linux
Comments 4
0
Какая красота! Задавал на stackoverflow именно такой вопрос и получил похожий ответ, но не на русском языке. Спасибо, что все разжевали по-русски. Кстати, в ходе моих личных эспериментов, на osx нет всех этих функций и секций перед _start, их там штуки 2-3 вместо (около 15) на linux, что и логично. Можно было бы проверить еще, что и как работает в osx :)

P.S. Линк на вопросец, может, кому тоже интересно будет: stackoverflow.com/questions/34966097/what-functions-does-gcc-add-to-the-linux-elf
+1
функция использует DSO-идентификатор, который известен только компилятору

Мне стало интересно как генерится этот __dso_handle. Например, если это случайное число, выбранное в момент компиляции, то оно может совпасть у двух библиотек, в таком случае их atexit'ы перепутаются.
Всё оказалось проще и хитрее: __dso_handle — это объект с релокацией, которая подставляется в момент загрузки библиотеки. А так как адреса библиотек в процессе не могут пересекаться, то и хэндлы от разных библиотек всегда будут разные.
0
Хорошее замечание. Ещё интересно, что по причине __dso_handle у каждой библиотеки определена своя личная функция atexit.
Only those users with full accounts are able to leave comments.  , please.