我正在編寫一個小型儀器工具。我必須在二進制文件中插入檢測程序。一個好的方法應該是將這些例程插入一個單獨的代碼段和一個單獨的數據段中,您能否解釋如何實現這一點?此外,如何修改原始文件中代碼段的大小?如何擴展ELF二進制文件
最佳,
我正在編寫一個小型儀器工具。我必須在二進制文件中插入檢測程序。一個好的方法應該是將這些例程插入一個單獨的代碼段和一個單獨的數據段中,您能否解釋如何實現這一點?此外,如何修改原始文件中代碼段的大小?如何擴展ELF二進制文件
最佳,
我必須在二進制文件中插入探測例程。一個好的方法應該是將這些例程插入單獨的代碼段和單獨的數據段中
什麼是binary file
?有一個大這樣做爲一個relocable(ET_REL
)目標文件,與完全鏈接的可執行文件(ET_EXEC
)或共享庫(ET_DYN
)這樣做之間的區別。
你能解釋一下如何做到這一點嗎?
對於ET_REL
,它應該是相當直接的:你讀文件頭,它指向節頭,它告訴你在哪裏.data
和.text
部分是。然後編寫一個新文件,擴展您想要的部分,複製其他部分,並調整部分標題以反映新的部分偏移和大小。
對於ET_DYN
或ET_EXEC
,這個問題很可能太難:你需要搬遷調整表,哈希表,程序頭;保持所有結構的一致性和正確對齊。
在肖恩柯羅威斯,肖恩·黑帽子演示抽空與ELF可執行進行修改兩種策略:
在文件補丁 - 通過延長段
在覈心做補丁(即時) - 通過利用由於段對齊而可用的內存空間 來實現它。
它被稱爲「黑帽美國2002 - 固定/二進制文件上打孔」(YouTube)的
你爲什麼不這樣做,在運行時使用插入? Linux上的'LD_PRELOAD',OS X上的'DYLD_INSERT_LIBRARIES'等工作得很好。 – 2013-03-29 12:01:25