linux c 内存elf,gcc加入linux ELF有什么功能?

这些大多数是在“主”程序本身之前或之后执行代码的各种方法,大多数都在crtstuff.c(

https://github.com/gcc-mirror/gcc/blob/master/libgcc/crtstuff.c)中.

它们存在以支持各种C类编程语言的特征,但它们也可以在C中访问.这可能似乎过于复杂,因为其中一些代表了传统的行李,还有一些需要支持GCC运行的各种不同架构的变体.

从您的列表中,逐个(或两个):

00000000004003f0 t deregister_tm_clones

0000000000400430 t register_tm_clones

0000000000400470 t __do_global_dtors_aux

在.fini_array不可用的系统上从程序退出时运行所有全局析构函数.

0000000000400490 t frame_dummy

此功能位于.init部分.它被定义为void frame_dummy(void),并且它的整个生命点是调用具有参数的__register_frame_info_bases.显然,来自.init部分的参数的函数调用可能是不可靠的,因此这个函数所以__register_frame_info_bases不直接从.init部分调用.

.eh_frame信息库用于异常处理和类似功能(例如使用__attribute __((cleanup(..))声明的函数)).

00000000004004e0 T __libc_csu_init

0000000000400550 T __libc_csu_fini

这些运行任何程序级的初始化器和finalizer(类似于整个程序的构造函数/析构函数).

如果定义如下功能:

void __attribute__ ((constructor)) mefirst () {

/* ... do something here ... */

}

void __attribute__ ((destructor)) melast () {

/* ... do something here ... */

}

0000000000400554 T _fini

这是一个现在不推荐使用的方式来运行程序级(实际上是目标文件级)析构函数(有关这方面的信息可以在man dlclose中找到).

构造函数的相应过时函数是__init.

0000000000600668 t __frame_dummy_init_array_entry

0000000000600668 t __init_array_start

这些标记了.init_array部分的结尾和开头,该部分包含指向所有程序级初始化器的指针(参见上面的__libc_csu_init).

这些标记了.fini_array部分的结束和开始,其中包含指向所有程序级终结器的指针(参见上面的__libc_csu_fini).

[编辑]一些附加说明:

>链接

http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html从Jester的问题评论包含一个很好的图和一个小样本程序说明了这些东西运行的总体顺序以及如何运行从C访问这些功能中的一些功能>术语’ctors’和’dtors’是缩写“构造函数”和“析构函数”.>全局构造函数/析构函数和对象文件之间的区别当程序出现时,构造函数/析构函数最为明显从多个目标文件构建.>标记为’T’的符号(__libc_csu_init,__libc_csu_fini,_fini)是“全局”(外部可见),剩余(标记为’t’)不是.0000000000000000000600668 t __frame_dummy_init_array_entry

0000000000600668 t __init_array_start

70 t __do_global_dtors_aux_fini_array_entry

000000000

0000000000600668 t __frame_dummy_init_array_entry

0000000000600668 t __init_array_start0000000000600668 t __frame_dummy_init_array_entry

0000000000600668 t __init_array_start0000000000600668 t __frame_dummy_init_array_entry

0000000000600668 t __init_array_start70 t __init_array_end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值