Подтвердить что ты не робот

Что именно хранят разделы .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-структуры как можно больше. Спасибо.

4b9b3361

Ответ 1

Пожалуйста, смотрите cfi-directives

Он должен охватывать историю и теорию большинства рассматриваемых разделов.

О eh_frame, он содержит информацию об исключении исключения и исходном языке. Каждая запись в этом разделе представлена ​​одиночной CFI (информация о кадре вызова)

см. eh_frame в linuxfoundation

eh_frame_hdr, используется кодом времени выполнения С++ для доступа к eh_frame. Это означает, что он содержит таблицу указателя и бинарного поиска для эффективного извлечения информации из eh_frame.

Теперь, если вы хотите увидеть, как вы читаете/записываете эти разделы, я предлагаю взглянуть на следующий код компоновщика.

(ищите EhFrame.cpp, EhFrameHdr.cpp и EhFrameReader.cpp)

Удачи!