[發明專利]基于寄存器傳輸語言確定動態函數調用關系的方法有效
| 申請號: | 201410015881.4 | 申請日: | 2014-01-14 |
| 公開(公告)號: | CN103761089B | 公開(公告)日: | 2017-09-15 |
| 發明(設計)人: | 向勇;湯衛東;杜香燕;孫衛真;馬東超;鄧雪峰 | 申請(專利權)人: | 清華大學 |
| 主分類號: | G06F9/44 | 分類號: | G06F9/44 |
| 代理公司: | 北京中偉智信專利商標代理事務所11325 | 代理人: | 張岱 |
| 地址: | 100084*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 寄存器 傳輸 語言 確定 動態 函數 調用 關系 方法 | ||
技術領域
本發明涉及函數調用關系技術領域,具體涉及一種基于寄存器傳輸語言確定動態函數調用關系的方法。
背景技術
對源代碼的閱讀分析可以通過函數調用圖來實現,函數調用圖可以是宏觀的(源碼模塊間調用關系),也可以是微觀的(具體到某一個函數的調入和調出關系)。函數調用圖可以展現源代碼靜態的一種函數調用走向,也可以用來展示系統或程序運行時函數調用狀態。為了分析的精確、方便以及高效,研究者開發許多函數調用圖的生成工具。
靜態函數調用圖生成工具是指建立在已知源碼的基礎上,根據不同的分析需要開發的工具,這些工具中有些作用對象僅為源碼如Source Insight、Understand等,有些作用對象是編譯過程生成的中間結果如Codeviz、Egypt、LLVM以及Open64等。
動態函數調用圖生成工具是建立在獲取系統或軟件在運行過程中發生的函數調用關系并繪制成調用圖的工具,為了獲取運行時的函數調用情況也開發了一些工具如Systemtap、gprof、KCachegrind、ftrace、pprof tool等,它們有些是針對于內核有些是針對有軟件的,其基于的目的也各不相同,但它們都是基于函數調用關系分析。
Gprof是在編譯時讓每個函數均調用mcount函數,同時會在內存中保存函數調用圖,這樣做會降低系統的性能,如果對系統全部函數調用跟蹤的話,會造成內存使用不足。Ftrace的原理類似于gprof的原理,只是它不會在內存中保存函數調用圖,而且mcount的使用也是動態的,可以根據用戶的要求在需要時替換nop為mcount指令。SystemTap是監控和跟蹤運行中的Linux內核的操作的動態方法,SystemTap沒有使用工具構建一個特殊的內核,而是允許您在運行時動態地安裝該工具,它通過一個名為Kprobes的應用編程接口(API)來實現該目的。pprof tool主要用于分析cpu運行瓶頸需要對應用軟件產生中斷后記錄相關信息。Gprof、ftrace以及KCachegrind都是基于靜態的插樁技術,ftrace其本質也是靜態的插樁技術只是實現上有所不同。而本文將要采用的跟蹤工具是建立在虛擬機之上的,不會對源代碼插入代碼,因此不會影響系統執行本身的性能。
KCachegrind無法跟蹤到系統調用,而gprof、ftrace等可以跟蹤到系統調用但無法跟蹤到系統啟動過程,這些問題都將在本文的工具中得到解決。SimSight基于Simics的動態跟蹤工具,與本文設計理念最為接近,但SimSight無法給出靜態與動態相結合的函數調用圖。
發明內容
針對上述問題,本發明提供一種能夠清楚描述指針函數以及可加載模塊的調用關系的基于寄存器傳輸語言確定動態函數調用關系的方法。
為達到上述目的,本發明基于寄存器傳輸語言確定動態函數調用關系的方法,所述方法包括:
在系統運行過程中檢測函數調用執行事件,
若檢測到調用指令后,解析該指令調用的函數入口地址對應的函數名,統計指令次數,輸出函數名、調用發生時間、所屬進程號、所屬線程號、所屬棧頂指針以及模塊號,并保存到跟蹤數據文件;
若檢測的指令是返回指令后,輸出時間、所屬進程號、所屬線程號以及所屬棧頂指針到跟蹤數據文件;
對所述跟蹤數據文件進行處理獲得預定標準的數據格式,將處理后的跟蹤數據文件傳輸至靜態函數調用關系生成裝置中,生成描述函數調用關系的動態函數調用圖。
進一步地,所述跟蹤數據文件的生成方法包括:
通過對目標文件的解析獲取函數入口地址對應的函數名、函數所在文件及行號的列表;
解析操作系統內核符號表,獲取函數入口地址和函數名,根據地址和函數名查找獲取的函數所在文件及行號補全函數信息,并記錄到函數列表數組中;
讀取模塊符號表,獲取模塊的函數符號表,并記錄到模塊函數列表數組中;
若給定的地址在函數列表數組中找到,則返回模塊名和函數名;
若給定的地址在模塊函數列表數組中找到,則返回系統的模塊名和函數名;
若給定的地址在所述函數列表數組和所述模塊函數列表數組均找不到,則判斷函數是否在內存中存在,
若在內存中存在,則從內存中讀取內存地址,在此地址之后依次讀取符號地址判斷與需查詢地址是否一致,并記錄內存位置,從記錄位置讀取內存信息為函數名索引地址,若查到則根據索引地址和符號地址起始地址讀取符號名長度,計算出所查地址的偏移,獲取函數名長度,進而返回函數名;
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于清華大學,未經清華大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410015881.4/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種防水外墻板
- 下一篇:一種人造洞石保溫裝飾一體板





