В разделяемой библиотеке должен существовать файл .eh_frame_hdr, чтобы иметь действительный
.eh_frame? Под действительным я имею в виду .eh_frame с записями.
Если я создаю общую библиотеку из стаб-файла. Я вижу, что в библиотеке есть .eh_frame, но нет .eh_frame_hdr.
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
г ++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
- Тест окурка
stub_a.cpp ---> пусто
% g ++ -fPIC -O -c stub_a.cpp
% gcc -g -std = c99 -nodefaultlibs -nostdlib -shared -Wl, -Bsymbolic -Wl, -soname -Wl, libhello.so -o libhello.so stub_a.o
% objdump -h libhello.so | grep eh_frame
4 .eh_frame 00000000 0000000000000270 0000000000000270 00000270 2 ** 3
% g ++ -fPIC -O -c sym_a.cpp
% gcc -g -std = c99 -nodefaultlibs -nostdlib -shared -Wl, -Bsymbolic -Wl, -soname -Wl, libhello.so -o libhello.so sym_a.o
% objdump -h libhello.so | grep eh_frame
5 .eh_frame_hdr 0000001c 00000000000002f4 00000000000002f4 000002f4 2 ** 2
6 .eh_frame 00000048 0000000000000310 0000000000000310 00000310 2 ** 3
Таким образом, вопрос в том, что при использовании вызовов elf_xxxx (), какой подход будет правильным, использовать или не проходить через записи в .eh_frame?
- получить данные из .eh_frame (если существует) и проверить "d_buf" на NULL.
- проверить существование .eh_frame_hdr.