linux c 内存elf,gcc加入linux ELF有什么功能?
這些大多數(shù)是在“主”程序本身之前或之后執(zhí)行代碼的各種方法,大多數(shù)都在crtstuff.c(
https://github.com/gcc-mirror/gcc/blob/master/libgcc/crtstuff.c)中.
它們存在以支持各種C類編程語言的特征,但它們也可以在C中訪問.這可能似乎過于復雜,因為其中一些代表了傳統(tǒng)的行李,還有一些需要支持GCC運行的各種不同架構(gòu)的變體.
從您的列表中,逐個(或兩個):
00000000004003f0 t deregister_tm_clones
0000000000400430 t register_tm_clones
0000000000400470 t __do_global_dtors_aux
在.fini_array不可用的系統(tǒng)上從程序退出時運行所有全局析構(gòu)函數(shù).
0000000000400490 t frame_dummy
此功能位于.init部分.它被定義為void frame_dummy(void),并且它的整個生命點是調(diào)用具有參數(shù)的__register_frame_info_bases.顯然,來自.init部分的參數(shù)的函數(shù)調(diào)用可能是不可靠的,因此這個函數(shù)所以__register_frame_info_bases不直接從.init部分調(diào)用.
.eh_frame信息庫用于異常處理和類似功能(例如使用__attribute __((cleanup(..))聲明的函數(shù))).
00000000004004e0 T __libc_csu_init
0000000000400550 T __libc_csu_fini
這些運行任何程序級的初始化器和finalizer(類似于整個程序的構(gòu)造函數(shù)/析構(gòu)函數(shù)).
如果定義如下功能:
void __attribute__ ((constructor)) mefirst () {
/* ... do something here ... */
}
void __attribute__ ((destructor)) melast () {
/* ... do something here ... */
}
0000000000400554 T _fini
這是一個現(xiàn)在不推薦使用的方式來運行程序級(實際上是目標文件級)析構(gòu)函數(shù)(有關這方面的信息可以在man dlclose中找到).
構(gòu)造函數(shù)的相應過時函數(shù)是__init.
0000000000600668 t __frame_dummy_init_array_entry
0000000000600668 t __init_array_start
這些標記了.init_array部分的結(jié)尾和開頭,該部分包含指向所有程序級初始化器的指針(參見上面的__libc_csu_init).
這些標記了.fini_array部分的結(jié)束和開始,其中包含指向所有程序級終結(jié)器的指針(參見上面的__libc_csu_fini).
[編輯]一些附加說明:
>鏈接
http://dbp-consulting.com/tutorials/debugging/linuxProgramStartup.html從Jester的問題評論包含一個很好的圖和一個小樣本程序說明了這些東西運行的總體順序以及如何運行從C訪問這些功能中的一些功能>術語’ctors’和’dtors’是縮寫“構(gòu)造函數(shù)”和“析構(gòu)函數(shù)”.>全局構(gòu)造函數(shù)/析構(gòu)函數(shù)和對象文件之間的區(qū)別當程序出現(xiàn)時,構(gòu)造函數(shù)/析構(gòu)函數(shù)最為明顯從多個目標文件構(gòu)建.>標記為’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
總結(jié)
以上是生活随笔為你收集整理的linux c 内存elf,gcc加入linux ELF有什么功能?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把XSX“压扁了”:微软云游戏机顶盒Xb
- 下一篇: 小米13稳了 高通第二代骁龙8年底发:骁