2013-11-28 51 views
0

我已經創建了一個函數,檢查一部分二進制代碼的完整性。LLVM後處理二進制文件與紅外通過

該函數添加了一個llvm pass。

它需要開始結束地址加上校驗值

檢查值是對二進制代碼計算的結果。令人遺憾的是,IR傳遞位於llvm的中間部分,這部分與IR一起使用,而不與二進制文件一起使用。

您還不知道二進制代碼,以及地址如何。

現在,我創建我的通行證一切,我可以和我用pyelftool進入二進制文件,並修改像個瘋子一樣;-)

我的第一個問題是的十六進制值:是可能提前知道這個地址。

我看到blockaddress但我需要更靈活的東西(指令地址)。

我的第二個問題是:有人對修改檢查值有更好的主意。我的解決方案不是非常優雅,我依賴於平臺 -

我希望我能理解。

謝謝,

回答

0

您的問題不清楚。這聽起來像是你試圖在LLVM IR級別和二進制機器代碼級別之間進行一些奇怪的混合,這沒有多大意義。

LLVM IR是一種相當抽象的,與目標無關的語言,充當編譯器的中間表示。 LLVM IR沒有鏈接到最終由其發出的指令地址。 blockaddress用於基本塊的地址,但它具有LLVM i8*類型,而不是某個機器特定的地址。

+0

謝謝你的回答。是的,我知道我嘗試混合LLVM IR和二進制代碼,並且根本不推薦它......我想我必須找到另一種方法。 – user3046583