我编译了一个简单的helloworld
并查看了使用objdump
.
一开始有_init
:
0000000000400600 <_init>:
400600: 48 83 ec 08 sub rsp,0x8
400604: 48 8b 05 ed 09 20 00 mov rax,QWORD PTR [rip+0x2009ed] # 600ff8 <_DYNAMIC+0x1e0>
40060b: 48 85 c0 test rax,rax
40060e: 74 05 je 400615 <_init+0x15>
400610: e8 1b 00 00 00 call 400630 <__gmon_start__@plt>
400615: 48 83 c4 08 add rsp,0x8
400619: c3 ret
什么是_DYNAMIC
?使用-x
我可以看到部分详细信息:
Dynamic Section:
NEEDED libstdc++.so.6
NEEDED libc.so.6
INIT 0x0000000000400600
FINI 0x0000000000400864
INIT_ARRAY 0x0000000000600df8
INIT_ARRAYSZ 0x0000000000000010
FINI_ARRAY 0x0000000000600e08
FINI_ARRAYSZ 0x0000000000000008
GNU_HASH 0x0000000000400298
STRTAB 0x00000000004003c8
SYMTAB 0x00000000004002c0
STRSZ 0x000000000000011c
SYMENT 0x0000000000000018
DEBUG 0x0000000000000000
PLTGOT 0x0000000000601000
PLTRELSZ 0x0000000000000090
PLTREL 0x0000000000000007
JMPREL 0x0000000000400570
RELA 0x0000000000400540
RELASZ 0x0000000000000030
RELAENT 0x0000000000000018
VERNEED 0x0000000000400500
VERNEEDNUM 0x0000000000000002
VERSYM 0x00000000004004e4
但是,我不确定哪个条目rip+0x2009ed
指的是。考虑到下一行是对 的调用gmon
,它与GPROF
钩子有什么关系吗?