Что именно хранят разделы .eh_frame и .eh_frame_hdr?
Я знаю, что при использовании языков, поддерживающих исключения, например С++, в среду выполнения должна быть предоставлена дополнительная информация для описания кадров вызовов, которые необходимо разматывать во время обработки исключения. Эта информация содержится в специальных разделах объектных файлов, таких как .eh_frame
и .eh_frame_hdr
.
Но какие структуры данных хранятся в этих разделах? Я имею в виду, их можно прочитать с помощью любой C-структуры? Имеют ли они какое-либо отношение к операторам .cfi
(например, .cfi_startproc
, .cfi_endproc
, .cfi_offset
, .cfi_def_cfa_offset
, .cfi_personality
и .cfi_lsda
) в коде сборки GNU? Если они это сделают, что каждый из этих статей вызывает в этих разделах? Что раздел .eh_frame_hdr
связан с .eh_frame
одним?
Я был бы благодарен за объяснения, используя C-структуры как можно больше. Спасибо.
Ответы
Ответ 1
Пожалуйста, смотрите cfi-directives
Он должен охватывать историю и теорию большинства рассматриваемых разделов.
О eh_frame, он содержит информацию об исключении исключения и исходном языке. Каждая запись в этом разделе представлена одиночной CFI (информация о кадре вызова)
см. eh_frame в linuxfoundation
eh_frame_hdr, используется кодом времени выполнения С++ для доступа к eh_frame. Это означает, что он содержит таблицу указателя и бинарного поиска для эффективного извлечения информации из eh_frame.
Теперь, если вы хотите увидеть, как вы читаете/записываете эти разделы, я предлагаю взглянуть на следующий код компоновщика.
(ищите EhFrame.cpp, EhFrameHdr.cpp и EhFrameReader.cpp)
Удачи!