2012-09-21 53 views
2

正常情況下如果要修改LLVM IR,則需要寫入通行證。然而,如果一個更高級別的工具可以幫助你,那麼自己寫一遍就是一種矯枉過正的行爲。用於在LLVM中寫入通行證的更高級別的工具

例如,有人可能希望在程序中記錄每個loadstore。爲此,他需要注入代碼來完成日誌記錄。現在如果有更高層次的工具,它可以爲我們提供回調以寫出我們想要的東西。因此,在這種情況下,例如,它可以爲我們提供OnLoadOnStore函數,我們可以填寫這些函數以告知工具在每個加載和存儲上應執行哪些操作。這種工具是否存在?

所以基本上我想要的東西類似於動態二進制工具工具提供的東西,但它適用於LLVM,用於編譯時代碼注入。

+1

你檢查現有的LLVM API,如果是這樣,你發現了什麼缺什麼?我記得LLVM API足夠強大,可以在幾行代碼中完成類似的事情,儘管我從未使用它。 – delnan

+0

它們確實足夠強大,但如果存在更高級別的工具,我仍然認爲可以更輕鬆地完成一些任務。例如,在這種情況下,儘管可以通過編寫一個通行證來記錄每個負載和存儲的地址,但是通過簡單地實施OnLoad並不能告訴工具該做什麼這樣簡單OnStore功能。用一個工具來做這件事將會容易10倍。 – pythonic

+2

這就是LLVM IR文本表示的一個小小的grep-fu或sed-fu。或者,更好的是,使用LLVM API的30行C++。 – CAFxX

回答

2

我想你應該考慮使用PIN而不是LLVM這樣的事情:http://www.pintool.org/

PIN碼,您可以插入儀器/在幾個粒度級別分析代碼:指令,基本塊,功能,痕跡和甚至加載/卸載共享庫。這可能是一種更實用的方法,因爲您不需要編譯應用程序 - 所以您可以分析非開源的程序。

有針對windows和linux的PIN版本。

PS:另外一個工具,它似乎是有用的:http://eces.colorado.edu/~blomsted/llvmpin/llvmpin.html