在共享库中,是否必须存在.eh_frame_hdr才能有效 .eh_frame?有效是指带有条目的.eh_frame。
如果我从存根文件创建共享库。我看到该库具有.eh_frame但没有.eh_frame_hdr。
gcc(GCC)4.8.5 20150623(红帽4.8.5-28)
g ++(GCC)4.8.5 20150623(红帽4.8.5-28)
%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
符号测试 使用以下代码创建sym_a.cpp:
int B(无效) { 返回0; }
int A(无效) { B(); }
%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中的条目采用哪种方法是正确的?