2014-10-10 40 views
2

我跟着http://tinyhack.com/2014/03/12/implementing-a-web-server-in-a-single-printf-call/寫一個只有printf()調用的web服務器。什麼時候會使用.fini_array部分?

我遵循文章的指導。

Howerver,我發現我的程序的可執行文件在objdump的幫助下不包含.fini_array部分。

注意到.fini_array是由Linux Standard Base Core Specification定義的。

我讀過它,我很好奇.fini_array部分和.fini部分之間的關​​系,他們如何一起工作?

似乎.fini_array是沒有必要的。所以當它被使用時,我應該如何繼續我的工作?

回答

1

http://docs.oracle.com/cd/E19683-01/817-1983/6mhm6r4es/index.html

運行時鏈接執行其地址包含在 的.fini_array部分功能。這些函數以 的反向順序執行,其中地址出現在數組中。運行時鏈接程序 將作爲單獨的函數執行.fini節。如果對象 包含.fini和.fini_array部分,則由 定義的函數.fini_array部分將在對象爲 的.fini部分之前處理。

所以fini_array是可選的,是一種的fini票友版本。

+0

編譯器何時將fini_array部分插入到可執行頭文件中? – amazonsx 2014-10-13 06:30:28

+0

這取決於編譯器,編譯器的版本,也許是確切的平臺....不知道爲什麼這對你很重要。 – 2014-10-13 07:05:44

+0

我試圖做一些shellcode的東西,教科書告訴我修改該部分,而我無法找到它。 – amazonsx 2014-10-17 08:43:57

相關問題