问GHC/GCC编写第三方库与.eh_frame处理EN将文件编译为静态库.a # 将cJSON.c编译为cJSON.o, -c只...
.rodata1 : { *(.rodata1) } .eh_frame_hdr : { *(.eh_frame_hdr) *(.eh_frame_entry .eh_frame_entry.*) } .eh_frame : ONLY_IF_RO { KEEP (*(.eh_frame)) *(.eh_frame.*) } .gcc_except_table : ONLY_IF_RO { *(.gcc_except_table .gcc_except_table.*) } .gnu_extab :...
0000000000003db8 d .fini_array 0000000000001160 t frame_dummy 0000000000003db0 d __frame_dummy_init_array_entry 00000000000021a4 r __FRAME_END__ 0000000000003fb0 d _GLOBAL_OFFSET_TABLE_ w __gmon_start__ 0000000000002034 r __GNU_EH_FRAME_HDR 00000000000003a0 r .gnu.hash 0000000000000512 r .gnu...
5 .eh_frame 00000038 00000000 00000000 00000090 2**2 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA SYMBOL TABLE: 00000000 l df *ABS* 00000000 main.i 00000000 l d .text 00000000 .text 00000000 l d .data 00000000 .data 00000000 l d .bss 00000000 .bss 00000000 l d .note.GNU-stack 0000...
.section .eh_frame,"a",@progbits .Lframe1: .long .LECIE1-.LSCIE1 .LSCIE1: .long 0x0 .byte 0x1 .string "zR" .uleb128 0x1 .sleb128 -8 .byte 0x10 .uleb128 0x1 .byte 0x3 .byte 0xc .uleb128 0x7 .uleb128 0x8
$ ld --eh-frame-hdr / -m elf_i386 / -dynamic-linker /lib/ld-linux.so.2 / -o test / /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/gcc/i486-slackware-linux/4.1.2/crtbegin.o / test.o myprintf.o / -L/usr/lib/gcc/i486-slackware-linux/4.1.2 -L/usr/i486-slackware-linux/lib...
要求创建一个.eh_frame_hdr节区(貌似目标文件test中并没有这个节区,所以不关心它)。 Quote: $ ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o test /usr/lib/crt1.o /usr/lib/crti.o test.o myprintf.o -L/usr/lib -lc /usr/lib/crtn.o #后面发现不用链接libgcc,也不用--eh-fram...
RELOCATION RECORDS FOR [.eh_frame]: OFFSET TYPE VALUE 0000000000000020 R_X86_64_PC32 .text # 对比一下两个位置在链接后文件的值 # 1a 17: 48 8d 15 00 00 00 00 lea 0x0(%rip),%rdx # 1e <main+0x1e> 401017: 48 8d 15 e2 2f 00 00 lea 0x2fe2(%rip),%rdx # 404000 <share...
可见,program(段) 0合并了三个节:.text、.rodata和.eh_frame,所以program(段) 0的数据总长度应是三者之和: 0xaf+0x7+0x94=0x14A。 而图中的实际长度是0x64c,和0x14A差得有点远。别着急,我们再仔细看,它的offset字段偏移值是0,就是说它是从ELF文件第一个字节开始截取的,因此截取内容除了以上三个节...
-fomit-frame-pointer对于不需要栈指针的函数就不在寄存器中保存指针,因此可以忽略存储和检索地址的代码,同时对许多函数提供一个额外的寄存器。所有"-O"级别都打开它,但仅在调试器可以不依靠栈指针运行时才有效。在AMD64平台上此选项默认打开,但是在x86平台上则默认关闭。建议显式的设置它。-falign-functions=N-...