由于上周關于fuzzing的論文閱讀中多次提到instrumentation技術,故搜索相關資料進行學習。
根據維基百科[1]與IBM的介紹[2],插樁是一種測試程序性能、檢測錯誤、獲取程序執行信息的技術。
根據百度百科[4],插樁技術最早由J.C. Huang提出[3]。在保證被測程序原有邏輯完整性的基礎上在程序中插入一些探針(probe),即添加一些代碼,獲得程序的控制流和數據流信息。例如通過自動工具或手動,在函數執行前后插入讀取計時器的代碼,獲取函數執行時間。
根據對象不同,可以分為源代碼插樁和二進制插樁(也叫binary、目標程序插樁)。
根據粒度,可以分為函數級別插樁、基本塊級別插樁、邊界級別插樁(按照代碼執行路徑進行插樁)、指令級別插樁。
根據分析方法,可分為靜態插樁和動態插樁[5]。靜態插樁技術包括簡單的手動插樁,基于編譯器/匯編器的插樁,以及鏈接時或鏈接后的可執行文件編輯。動態插樁技術的實現往往比靜態的更復雜,但可以跟蹤動態鏈接的庫和間接分支,而這些是靜態插樁難以處理的。
常見的插樁位置包括:a.程序的第一條語句;b.分支語句的開始;c.循環語句的開始;d.下一個入口語句之前的語句;e.程序的結束語句;f.分支語句的結束;g.循環語句的結束。
常見插樁策略包括:語句覆蓋探針(基本塊探針):在基本塊的入口和出口處,分別植入相應的探針,以確定程序執行時該基本塊是否被覆蓋;分支覆蓋探針:c/c++語言中,分支由分支點確定。對于每個分支,在其開始處植入一個相應的探針,以確定程序執行時該分支是否被覆蓋;條件覆蓋探針:c/c++語言中,if, swich,while, do-while, for 幾種語法結構都支持條件判定,在每個條件表達式的布爾表達式處植入探針,進行變量跟蹤取值,以確定其被覆蓋情況。
對binary的插樁可分為兩種情況:一種是對未運行的目標代碼插樁,從頭到尾插人測試代碼,然后執行程序。這種方式適用于需要實現完整系統或仿真時進行的代碼覆蓋測試。另一種情況是向正在運行的程序插人測試代碼,用來檢測程序在特定時間的運行狀態信息。向正在運行的程序插人測試代碼,即動態二進制插樁(dynamic binary instrumentation ,DBI)技術,由于其易用性和靈活性使其在編程語言、軟件測試和安全研究中得到了廣泛的應用[6],當然也有一些弊端。
常見的DBI框架包括Pin,DynamoRIO和Frida,以及Valgrind, Triton (uses Pin), QDBI, BAP, Dyninst等。
大多數動態二進制插樁框架都有三種執行模式[7]:解釋模式、探測模式(probe mode)和JIT模式。
JIT模式(just-in-time mode)是最常見的實現方式,也是最常用的模式。在JIT模式下,原始二進制文件或可執行文件實際上從未被修改或執行過。此時二進制文件被視為數據,修改后的二進制文件副本將在新的內存區域中生成(但只針對二進制文件的執行部分,而不是整個二進制文件),此時執行的就是這個修改后的文件副本。
解釋模式(Interpretation mode),目標代碼被視為數據,測試人員插入的測試代碼作為目標代碼指令的解釋語言,每當執行一條目標代碼指令,程序就會在測試代碼中查找并執行相應的替代指令,測試通過替代指令的執行信息就可以獲取程序的運行信息。
探測模式(probe mode),二進制文件實際上是通過使用新指令來覆蓋舊的指令,來達到修改目的的,不過這會導致運行開銷增大,但在某些體系結構(如x86)中,該方式卻很好用。
[1] Instrumentation (computer programming)-Wiki
[2] Source code instrumentation overview-IBM
[3] Huang, J. C . Program Instrumentation and Software Testing[J]. Computer, 1978, 11(4):25-32.
[4] 程序插樁-百度百科
[5] Kempf T , Karuri K , Gao L . Software Instrumentation[M]. John Wiley & Sons, Inc. 2008.
[6] D'Elia D C , Coppa E , Nicchi S , et al. SoK: Using Dynamic Binary Instrumentation for Security (And How You May Get Caught Red Handed)[C]// ACM Asia Conference on Computer and Communications Security (ASIA CCS) 2019. ACM, 2019.
[7] Dynamic Binary Instrumentation Primer-Blog
程序插樁簡介-CSDN
Linux中對【庫函數】的調用進行跟蹤的 3 種【插樁】技巧-CNBLOG
靜態程序分析 wiki
trace-wiki
靜態代碼插樁-CSDN
“插樁”式技術-知乎
動態二進制插樁的原理和基本實現過程(一)-知乎
軟件測試教程:目標代碼插樁的三種執行模式-知乎
https://github.com/Techlord-RCE/DBI
https://www.intel.com/content/www/us/en/developer/articles/tool/pin-a-dynamic-binary-instrumentation-tool.html
https://dynamorio.org/
https://frida.re/
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
中國移動怎么充1元話費?來淘寶 s首頁點擊搜索框搜索你號碼的歸屬地,充值1元話費。找到可以充值一元的店鋪,點擊購買提交訂單。點擊搜索框打開淘寶軟件,進入淘寶首頁,點擊首頁頂部的搜索框。搜索手機歸屬地,1元話費充值。在搜索框里搜索手機,加1元手機費充值。單擊購買提交訂單。找到1元充值的店鋪,點擊下面的立即購買,然后點擊提交訂單。淘寶上75元充100元話費?對,有這個活動。這是淘寶上推出的一個通話推廣...
100萬日元在日本人眼里算多嗎?很多人認為100萬日元兌換成大約是6萬元,應該不是很多錢。這只是一個完全錯誤的想法。我也是這么想的,因為日本收入高,物價低。但是,當你接觸到年輕一代的日本人,和日劇的情節進行交叉對比,你會發現,實際的100萬日元真的不是一筆小數目。首先,日本人不 他們沒有像人那樣存錢買房的習慣,所以每個月花在租房上的錢占了他們收入的很大一部分。其次,日本服務的價格都很高,每個月想省...
濱州學院有幾個校區?濱州大學只有一個校區,位于濱州市濱城區。地理環境不錯,周邊設施比較齊全。學校南門對面還有一條小吃街,校內設施比較齊全。濱州學院有幾個校區?目前,濱州大學在濱州市濱城區只有一個校區。濱州學院,位于山東省濱州市,是一所全日制普通本科學校。其前身是創建于1954年的北鎮師范學校。1983年更名為濱州師范學院,2004年5教育部批準轉為濱州學院。具體地址:山東省濱州市黃河五路391號0...