日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/10 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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有什么功能?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。