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
總結
以上是生活随笔為你收集整理的linux c 内存elf,gcc加入linux ELF有什么功能?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 把XSX“压扁了”:微软云游戏机顶盒Xb
- 下一篇: linux 其他常用命令