到目前爲止,通過gdb + qemu,我可以跨入Linux內核源代碼。是否可以同時調試用戶空間程序?例如,單步執行從用戶空間到內核空間的程序,以便我可以通過發行info registers
來觀察qemu顯示器上的寄存器更改?是否可以使用gdb和qemu同時調試linux用戶空間程序和內核空間?
7
A
回答
3
0
最小的一步setep設置
,但這裏是一個fully automated QEMU + Buildroot example這presuposes你already know how to debug the kernel with QEMU + gdb和更詳細的exaplanation:
readelf -h myexecutable | grep Entry
給出:
Entry point address: 0x4003a0
所以在GDB裏面我們需要做的是:
add-symbol-file myexecutable 0x4003a0
b main
,然後纔開始在QEMU的可執行文件:
myexecutable
更可靠的方式做到這一點是設置myexecutable
作爲init
過程中,如果你能做到這一點。
爲什麼你會想要這樣做而不是gdbserver
?
,我只能看到一個用例爲這個至今:調試init
:Debug init on Qemu using gdb
否則,爲什麼不直接使用下面的更可靠的方法,例如步入一個系統調用:
- 開始兩個遠程GDBS:
- 一個與
qemu-system-* -s
- 其他
gdbserver myexecutable
作爲解釋說:在的gdbserver
GDB https://reverseengineering.stackexchange.com/questions/8829/cross-debugging-for-mips-elf-with-qemu-toolchain/16214#16214
- 一個與
- 步驟儘可能接近儘可能的系統調用,這通常意味着進入QEMU的GDB中的libc
- ,例如
b sys_read
用於讀取系統調用 - 回
gdbserver
,做continue
我提出這一點,因爲:
- 使用QEMU GDB的用戶態可導致隨機跳躍爲內核上下文切換到另一個進程使用相同的虛擬地址
我無法正確加載共享庫沒有
gdbserver
:試圖sharedlibrary
直接給出:(gdb) sharedlibrary ../../staging/lib/libc.so.0 No loaded shared libraries match the pattern `../../staging/lib/libc.so.0'.
結果,因爲大多數內核相互作用經過stdib,你需要做大量的智能裝配的步進找到內核的入口,這可能是不切實際的。
直到,也就是說,有人寫了一個更智能的GDB腳本,該腳本對每條指令執行步驟,直到發生上下文切換或者直到源變爲可用。我想知道這樣的腳本不會太慢,因爲天真的方法在每條指令上都有來自GDB的通信開銷。
這可能讓你開始:Tell gdb to skip standard files
相關問題
- 1. Linux內核空間和用戶空間
- 2. Linux用戶空間和內核空間調度
- 3. linux內核和用戶地址空間
- 4. 如何使用GDB和QEMU調試Linux內核?
- 5. Linux內核:從內核空間調用用戶空間的回調函數
- 6. 無法使用QEMU/GDB調試內核
- 7. 內核空間和用戶空間的時間差
- 8. 內存分配內核空間和用戶空間進程
- 9. 是否術語「用戶空間」和「內核空間」指的是物理內存?
- 10. 在用戶空間和內核空間上執行進程
- 11. 使用qemu for i386 linux內核的地址空間標識符
- 12. 如何調試Linux內核使用GDB的QEMU環境
- 13. Linux ioctl命令在用戶空間和內核空間之間變化
- 14. Linux的跨定時內核和用戶空間
- 15. 對於arm Linux,用戶空間中的線程是否可以訪問內核空間的虛擬地址?
- 16. 用戶空間和內核空間崩潰之間的區別
- 17. 什麼是用於檢查內核空間和用戶空間的linux命令行使用的內存
- 18. 如何從空間和內核空間打印調試
- 19. 用戶空間和內核線程之間的共享內存
- 20. 用戶空間vs內核空間驅動程序
- 21. 在Linux內核空間執行程序
- 22. Netlink用戶空間和內核空間通信
- 23. 在內核空間和用戶空間中工作
- 24. 內核空間和用戶空間佈局
- 25. 如何使用mmap共享用戶空間和內核線程
- 26. 內核驅動程序和用戶空間的mmap
- 27. 如何從用戶空間程序調用Linux內核驅動函數?
- 28. 如何回調從用戶空間保持到內核空間
- 29. 使用gdb調試qemu
- 30. Linux內核可以與用戶空間進行通信的方式是什麼?
爲什麼不呢?要查看任務切換,請嘗試單步調試['__schedule'](http://lxr.free-electrons.com/source/kernel/sched/core.c?v=3.17#L2753),特別是正確,因爲它「返回「來完成新的任務。否則,請嘗試在各種系統調用中設置斷點,以查看進程調用它們時會發生什麼。 – 2014-10-09 06:44:11
感謝Jonathon,但是當程序仍然在用戶空間中運行時,我可以中斷嗎?實際上,我更感興趣的是在用戶空間中運行進程時觀察寄存器。 – 2014-10-09 09:47:53
@JeffLi您是否設法在qemu中調試用戶空間程序?我試圖做同樣的事情,但不知道如何確定程序加載地址如何 – 2015-08-09 14:39:00