指令碼模型:
entry(__entry)
sections
.dynsym :
.dynstr :
.gnu.version :
.gnu.version_d :
.gnu.version_r :
.rel.dyn :
.rel.plt :
.dynsym :
.entry_init :
__param_addr = . ;
.text *** : at( __param_addr + 100)@此處將會出現問題(將導致.plt以及.got覆蓋.text),原因為__param_addr
為執行態當前位址,則當使用at指明.text段載入位址為當前執行位址再加上100,但後面的.plt以及got段又使用預設的載入位址(即載入位址與執行位址相等),這樣就會在鏈結的時候造成.text段有100位元組的載入位址與.ply段重疊!
要點:.text*** : at( __param_addr + 100)@此處將會出現問題(將導致.plt以及.got覆蓋.text),原因為__param_addr
為執行態當前位址,則當使用at指明.text段載入位址為當前執行位址再加上100,但後面的.plt以及got段又使用預設的載入位址(即載入位址與執行位址相等),這樣就會在鏈結的時候造成.text段有100位元組的載入位址與.ply段重疊!
=0 :.text*** 為鏈結指令碼任意命名,可在反彙編中查詢到此段名稱,但*(.text .stub .text.* .gnu.linkonce.t.*)中的.text段為各.o中真實的.text段內容(gcc將會預設**段為.text,預設全域性可讀寫變數資料為.data段,預設唯讀全域性資料為.rodata段,預設未初始化的可讀寫資料為.bss段),如果在某個函式前面加上__attribute__ ((section(".main_data"))) 則將改變函式預設的.text段,而歸為新命名的.main_data段,同理,如果在某個全域性變數前面加__attribute__ ((section(".main_data")))則該變數由原來預設的.data段變為新命名 的.main_data段。
__param_addr = . ;的寫法需要注意為 xx = , ; 而非xx=.; z
對於STL的理解
stl standard template library stl是一些 容器 的集合,這些 容器 有list,vector,set,map等,stl也是演算法和其他一些元件的集合。這裡的 容器 和演算法的集合指的是世界上很多聰明人很多年的傑作。stl的目的是標準化元件,這樣就不用重新開發,可以使用...
對於ftok的理解
回顧了一下以前的實驗,一直不理解為什麼在訊息佇列中要使用ftok,比如下面的乙個例項 if key ftok a 1 qid msgget key,ipc creat 0666 建立乙個訊息佇列 if qid 0 printf created queue id d n qid 輸出訊息佇列的id 要...
對於Zookeeper的理解
zookeeper是google 的chubby乙個開源的實現,是hadoop 的分布式協調服務。它包含乙個簡單的原語集,分布式應用程式可以基於它實現同步服務,配置維護和命名服務等。zookeeper包括乙個leader和多個follower。為什麼使用zookeeper?大部分分布式應用需要乙個主...