歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Unix知識 >> Unix資訊

Unix系統插入寄生代碼知識講解

Unix系統為了插入寄生代碼,必須保證原來的代碼不被破壞,因此需要擴展相應段所需內存。文本段事實上不僅僅包含代碼,還有 ELF 頭,其中包含動態鏈接信息等等。

如果Unix系統直接擴展文本段插入寄生代碼,帶來的問題很多,比如引用絕對地址等問題。可以考慮保持文本段不變,額外增加一個段存放寄生代碼。然而引入一個額外的段的確容易引起懷疑,很容易被發現。

向高端擴展文本段或者向低端擴展數據段都有可能引起段重疊,在內存中重定位一個段又會使那些引用了絕對地址的代碼產生問題。可以考慮向高端擴展數據段,這不是個好主意,有些Unix系統完整地實現了內存保護機制,數據段是不可執行的。

段邊界上的頁填充提供了插入寄生代碼的地方,只要空間允許。在這裡插入寄生代碼不破壞原有段內容,不要求重定位。文本段結尾處的頁填充是個很好的地方,最後看上去象下面這個樣子:
關鍵字:
[...] 一個完整的頁
V 寄生代碼
T 文本段內容
D 數據段內容
P 填充

頁號
#1 [TTTTTTTTTTTTVVPP] <-- 文本段
#2 [PPPPDDDDDDDDPPPP] <-- 數據段

一個更完整的ELF可執行布局如下:
 

  1. ELF Header   
  2. Program header table   
  3. Segment 1   
  4. Segment 2   
  5. Section header table   
  6. Section 1   
  7. .   
  8. .   
  9. Section n 

典型的,額外的節(那些沒有相應段的節)用於存放調試信息、符號表等等。

Copyright © Linux教程網 All Rights Reserved