首页 > 解决方案 > 需要了解 .init_array 部分

问题描述

我是 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。但它的原因是什么?

谢谢!!

标签: assemblyx86g++gnu

解决方案


推荐阅读