我試圖實現一個函數來回溯內核中崩潰的用戶空間進程。因爲,我在Kernel工作,我沒有任何庫的豪華,並提供回溯功能不支持MIPS架構。我只是想知道我是否可以模擬GDB做什麼。 內核的版本是2.6.21。在MIPS Linux中追溯時,GDB如何找到函數的符號?
2
A
回答
1
我想你可以參考oprofile的實現。 (「 - fno-omit-frame-pointer」選項)Oprofile使用幀指針獲取後臺跟蹤信息,因此它需要用戶空間應用程序及其相關庫全部使用幀指針啓用。
另一種方式是,如果用戶的應用程序中包含調試信息來源,你可能需要檢查用戶應用程序的DWARF信息來源,DWARF調用框架信息來源proides了有關如何調用的函數足夠的信息來源調試器,以便它可以找到每個找到該函數的參數,找到當前的呼叫幀,並找到呼叫信息的呼叫幀。
如果你想簡單地抓取沒有支持「frame-pointer」的後臺跟蹤信息或任何調試信息,那麼你必須檢查用戶應用程序的mips指令,通過兒童上下文(SP,IP,RP)通過mips ABI規範獲得父上下文(SP,IP,RP),由於需要反編譯內存中的許多指令,這有點複雜且耗時,但它並不壞。例如,對於許多程序,在乞討中有一個「添加sp,sp,-32」類似指令,並且您將知道父項的sp是當前sp加32.
第二和第三種方式你必須自己實現它,因爲你在內核工作。
1
核心文件在ELF format。這是一個標準,在很多網站上只有一個谷歌可用。
然而,這種文件格式是非trival。很多怪癖和點點滴滴。任何合理的人應該使用第三方庫。如果你真的想這樣做,從libelf和readelf開始。祝你自己好運。
相關問題
- 1. 調試linux內核時gdb中的問號符號4.10
- 2. 如何追溯main調用gdb的方式?
- 3. 如何在追溯時獲取文件名和行號?
- 4. GDB回溯不顯示函數名稱
- 5. 如何解釋GDB回溯?
- 6. django追溯型號ID?
- 7. NASM和GDB符號:「在符號文件中找不到任何代碼段」。
- 8. 0x2e2e2e2e在GDB回溯?
- 9. GDB Windows?在回溯
- 10. 如何在函數調用中修復'找不到符號'?
- 11. 在gdb中找不到行號碼
- 12. 如何在迷宮中追溯...?
- 13. GDB如果幀在回溯中斷
- 14. 如何追溯函數內引發異常的原因?
- 15. GDB找不到行號
- 16. 如何追溯#pragma pack?
- 17. 我該如何追溯? python
- 18. 如何追溯錯誤
- 19. GDB在Linux中
- 20. 使用gdb時找不到調試符號
- 21. MIPS數組迭代符號?
- 22. 如何讓python函數返回異常追溯或結果?
- 23. GDB回溯告訴我符號名稱,但不是源文件
- 24. GDB沒有看到符號
- 25. GDB回溯不會在Mac
- 26. 解釋gdb回溯
- 27. 如何符號在Linux
- 28. Java - 找不到符號構造函數
- 29. 找不到符號 - 構造函數Car()
- 30. Java - 找不到符號 - 構造函數
你的意思是2.6.21?另外,爲什麼不做一個核心轉儲? – bdonlan 2009-06-27 03:22:07
你是對的。將6.2.21更改爲2.6.21 – Quincy 2009-06-27 04:43:57
此時將生成核心轉儲。我在這裏實施的是一個增強。 「如果你願意,可以增強調試體驗」。 – Quincy 2009-06-27 05:10:23