裝配分析工具
回答
您需要的是一種可以定義彙編語言語法,然後構建定製分析器的工具。你的分析器可能很簡單(「指令需要多少空間?」)或者複雜(「這個指令需要執行多少個週期?」[這取決於前面的指令序列,也可能是一個複雜的處理器模型關心])。
專門爲此設計的是New Jersey Machine Toolkit。它的確設計用於構建代碼生成器和調試器。我懷疑它會擅長「指令字節數」。目前還不清楚它是否擅長更復雜的分析。我相信它堅持要遵循的語法風格,而不是你的。
一個沒有專門設計來做到這一點,但一般在解析/分析語言是我們的 DMS Software Reengineering Toolkit。
可以給DMS幾乎任何上下文無關語言(涵蓋大多數彙編語言語法)的語法描述,然後可以將該語法的特定實例(彙編代碼)解析爲AST以供進一步處理。我們已經完成了幾個彙編語言,包括IBM 370,摩托羅拉的8位CPU線,以及一個相當獨特的DSP,沒有任何問題。
您可以輕鬆地爲DMS指定屬性語法(通過AST計算)。這些編碼只需要本地信息的分析的好方法,比如「這條指令有多大?」。對於更復雜的分析,您需要一個處理器模型,它是由一系列指令驅動的;通過這樣一個機器模型ASTs個別指令將是一個簡單的方法來應用機器模型來計算更復雜的事情,如「這條指令需要多長時間?」。
其他分析(如控制流和數據流)由DMS以通用形式提供。您可以使用屬性評估器來收集本地事實(本指令的「control-next」,「來自此指令的數據流向......」)並將它們提供給流量分析器以計算全局流量事實( 「如果我執行這條指令,下游可能執行哪些指令?」)
您必須爲您的特定(彙編)語言配置DMS。這是設計被配置爲這些任務。
是的,你可能會用Python編寫所有這些代碼;畢竟,它是一臺圖靈機。但可能不那麼容易。
其他好處:DMS願意根據您的分析將轉換應用於您的代碼。所以你也可以實現你的優化器。畢竟,您需要將優化是安全的分析指示連接到實際的優化步驟。
感謝您的鏈接和迷人的TechTalk。我認爲DMS對我的特殊情況可能是過度的,但這個概念本身非常有趣。使用DMS時學習曲線有多陡峭? – Zeke 2010-11-08 17:48:48
DMS是一個複雜的系統,因爲它處理複雜的工件,並且執行一些非常複雜的事情(對2500萬行C代碼進行流分析需要一些非常驚人的機器)。您可以在一週內瞭解基礎知識;請查看http://www.semanticdesigns.com/Products/DMS/SimpleDMSDomainExample.html以便快速瀏覽基礎知識。使用DMS可能需要6-12個月的時間才能成爲好的*;想想學習曲線,以善於使用C++。這可能不是思考DMS的正確方法;真正的問題是,需要多長時間才能完成同樣的任務? – 2010-11-08 18:05:52
儘管它看起來並不是免費的,因此它可能不適合個人項目/自由軟件項目。或者我錯了,只是錯過了「下載」鏈接?看起來像一個很酷的工具,但。 – 2010-11-12 09:20:38
我寫了很多反彙編,包括手臂和拇指。不是生產質量,而是爲了學習彙編程序。對於ARM和Thumb,ARM ARM(ARM體系結構參考手冊)都有一個很好的圖表,您可以輕鬆地從加載/存儲等中統計數據操作,可能需要花費數小時的工作時間,可能是兩個小時。至少在前面,你最終會計算數據值。
另一張海報可能是正確的,就像我在談論的圖表應該很簡單,編寫一個程序來檢查ASCII尋找ldr,str,add等。如果你是需要解析所有東西的話對內存操作計數感興趣等。當然,缺點是你很可能無法檢查循環。一個函數可能有一個加載和存儲,另一個函數可能有一個加載和存儲,但是它被一個循環包裝,一旦執行就會導致更多的內存操作。
不知道你真的感興趣,我的猜測是你可能想模擬代碼並計算這些類型的東西。我寫了一個拇指模擬器(thumbulator),試圖做到這一點。 (並且我用它來比較llvm執行和gcc執行,當涉及到執行指令的數量,提取,內存操作等等時)。問題可能是它只是拇指,沒有ARM沒有Thumb2。 Thumb2可以比ARM更容易添加。 arm中有一個armulator,它位於gdb的其他地方。我現在不記得它是否執行thumb2。我的理解是,當arm使用它時會準確地告訴你這些統計數據。
你沒有稱它爲「Thimbleulator」? – 2010-11-19 02:22:16
您可以將統計信息插入LLVM代碼生成器,它非常靈活,並且已經在收集一些統計數據,可以用作示例。
- 1. 未安裝Google分析工具
- 2. C#:分析工具
- 3. IO分析工具?
- 4. Clojure分析工具?
- 5. 淨分析工具
- 6. Delphi分析工具
- 7. SVN分析工具
- 8. XCode 4.5分析工具
- 9. Monodroid內存分析工具
- 10. 內存分析工具
- 11. C++代碼分析工具
- 12. C++影響分析工具
- 13. 軟件分析工具
- 14. SQL Server分析工具
- 15. require.js依賴分析工具
- 16. 代碼分析工具4
- 17. 分析可視化工具?
- 18. 3D形狀分析工具
- 19. Perfmon文件分析工具
- 20. 谷歌分析工具
- 21. 客戶分析工具
- 22. 定製iPhone分析工具
- 23. 與Piwik分析工具
- 24. VBA代碼分析工具
- 25. XCode - 瞭解分配工具
- 26. 分析裝入內存的可執行文件的工具
- 27. 日誌分析工具(過濾/分組/多線程分析)
- 28. 自動工具 - 通過可選分析庫配置腳本
- 29. Visuals Studio工具箱的裝配位置
- 30. 靜態代碼分析與動態代碼分析工具?
分析LLVM IR的方法會更容易,因爲它使用寄存器的SSA格式。 – delnan 2010-11-05 23:20:44
@delnan我同意,但我添加了一個彙編級別的優化通行證,所以我需要能夠分析實際生成的ASM。 – Zeke 2010-11-05 23:21:44
我是否可以建議您的通行證既可以作爲LLVM MachineFunctionPass工作,也可以在MC基礎架構內部完成必要工作?真的沒有理由解析asm,重建所有的控制和數據流信息,然後做一些優化。 – ohmantics 2010-12-01 18:35:52