01 .text 02 .eh_frame .init_array .fini_array .data .sdata .sbss .bss 03 上面这段显示了每个segment包含了哪些section 而readelf -S xxx可以显示section headers和section,给用户程序使用 而readelf -a xxx可以显示elf文件的所有信息 ELF 文件和 BIN 文件的区别 BIN文件是直接的二进制文件,内部没有地址...
e_ehsize 2字节,ELF文件头大小 Android不检查,默认ELF Header大小为52字节; IDA检查,修改该字段只会产生警告不影响反汇编 e_phentsize 2字节,表示程序头表每一个表项的大小 e_phnum 2字节,表示程序头表的表项数目 e_shentsize 2字节,节头表表项大小 e_shnum 2字节,节头表表项个数 e_shstrndx 2字节,...
+ .eh_frame_hdr + // 包含指针和二分查找表,(一般在C++)运行时可以有效地从eh_frame中检索信息。 +---+ + .eh_frame + // 它包含异常解除和源语言信息。此部分中每个条目都由单个CFI(呼叫帧信息)表示。 +---+ + .init_array + // 包含指针指向了一些初始化代码。初始化代码一般是在main函数之前...
0000000000000020 0000000000000000 A 0 0 8 [ 9] .eh_frame PROGBITS 0000000000000000 000000d0 0000000000000038 0000000000000000 A 0 0 8 [10] .rela.eh_frame RELA 0000000000000000 000002d0 0000000000000018 0000000000000018 I 11 9 8 [11] .symtab SYMTAB 0000000000000000 00000108 0000000000000138 0000000000000018...
2).rela.eh_frame :记录了需要进行地址重定位的异常处理框架(exception handling frame)信息 每个要被重定位的地方叫重定位入口(Relocation Entry),OFFSET 表示该入口在所在段中的偏移位置,TYPE 表示重定位入口的类型,VALUE 表示重定位入口的符号名称。重定位表项由结构 Elf64_Rel 表示。
06.eh_frame_hdr 07 08.init_array.fini_array.data.rel.ro.dynamic.got 总的来说,段是没有名字的,但我们往往把包含text节的段叫做代码(text)段,把含有data节的段叫做数据(data)段。一定程度上在口述时习惯也可以理解为 "段 = 节",例如bss段,rodata段,实际他们指bss节,rodata节。甚至有时候我们说text...
段名:.eh_frame 类型:PROGBITS 标志:alloc 相对文件头偏移:0x88 占用大小:0x38 第十个段 段名:.rela.eh_frame 类型:RELA 标志:info 相对文件头偏移:0x210 占用大小:0x18 第十一段 段名:.shstrtab 类型:STRTAB 标志:无 相对文件头偏移:0x228
04 .rodata .eh_frame_hdr .eh_frame 05 .init_array .fini_array .dynamic .got .data .bss 06 .dynamic 07 .note.gnu.property 08 .note.gnu.build-id .note.ABI-tag 09 .note.gnu.property 10 .eh_frame_hdr 11 12 .init_array .fini_array .dynamic .got ...
eh_frame_hdr 07 这里,含调试信息的main.debug和不含调试信息的main其内容是一样的。 查看目标文件的elf文件程序头表信息: 代码语言:javascript 代码运行次数:0 复制Cloud Studio 代码运行 [root@localhost test]$ readelf -l myfile.o There are no program headers in this file. 这里可知,可重定位的目标...
暂时回到RBP,Clang可以很好地根据RBP来追踪帧基址。最近版本的GCC更倾向于DW_OP_call_frame_cfa,它涉及解析.eh_frame ELF部分,这是一个完全不同的文章,我并不打算写。如果你告诉GCC使用DWARF 2而不是更新的版本,它会倾向于输出位置列表,这更容易阅读: ...