有效的.eh_frame和.eh_frame_hdr部分

时间:2018-11-09 18:45:47

标签: gcc g++

在共享库中,是否必须存在.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)

  • 存根测试 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

  • 符号测试 使用以下代码创建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中的条目采用哪种方法是正确的?

  1. 从.eh_frame(如果存在)中获取数据,并检查“ d_buf”是否为NULL。
  2. 检查.eh_frame_hdr是否存在。

0 个答案:

没有答案