我是x86汇编的新手,请帮助我了解.init_array的基本知识。我已经在线搜索了5个小时的文档,但没有找到任何有用的文档进行解释。
3240 Disassembly of section .init_array:
3241
3242 0000000000602dc0 <__frame_dummy_init_array_entry>:
3243 602dc0: 90 nop
3244 602dc1: 1f (bad)
3245 602dc2: 40 00 00 add %al,(%rax)
3246 602dc5: 00 00 add %al,(%rax)
3247 602dc7: 00 e0 add %ah,%al
3248 602dc9: 1c 40 sbb $0x40,%al
3249 602dcb: 00 00 add %al,(%rax)
3250 602dcd: 00 00 add %al,(%rax)
3251 602dcf: 00 50 1e add %dl,0x1e(%rax)
3252 602dd2: 40 00 00 add %al,(%rax)
3253 602dd5: 00 00 add %al,(%rax)
3254 ...
以上代码由libc ++库的objdump转储。
问题一:在上面的代码中,al和rax代表什么?试图达到什么目的?在3254行上,为什么这里有一个'''...'''?
问题二:我看到有人张贴他们的.init_array如下图所示:
Disassembly of section .init_array:
c1008db4 <.init_array>:
c1008db4: c1000000 .word 0xc1000000
c1008db8: c1000a68 .word 0xc1000a68
c1008dbc: c1000b64 .word 0xc1000b64
c1008dc0: c1000c04 .word 0xc1000c04
c1008dc4: c1000c68 .word 0xc1000c68
What are they representing? Why mine is totally different from his/her.
问题三:要放入.init_array的东西是什么?
问题四:我知道类构造函数的所有函数指针都放在.init_array中。但这是什么原因呢?
谢谢!