用qemu与gdb调试内核的一点问题

benet_1988 2011-03-13 04:36:47
最近在看《Orange's一个操作系统的实现》这本书,其中的源码有很多是C语言编写的。
想在C语言级上对内核进行调试,毕竟汇编级上有点......
参照了些网上的帖子,确实利用QEMU+GDB可以调试内核,但调试信息却怎么都无法加入。

(gdb) file
A program is being debugged already.
Are you sure you want to change the file? (y or n) y
No executable file now.
No symbol file now.

望大家指点一二,先谢谢了!!

注:直接利用 GDB 调试 *.BIN 文件 调试信息可以显示。
将 *.BIN => *.img 后 利用 QEMU + GDB 进行调试,内核可以正常运行,
但调试信息却无法读入(显示如上)。


...全文
277 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
benet_1988 2011-03-18
  • 打赏
  • 举报
回复
gdb调试boot.bin如下:(有调试信息)
(gdb) list
1 ; org 07c00h
2 mov ax,cs
3 mov ds,ax
4 mov es,ax
5 call DispStr
6 jmp $
7 DispStr:
8 mov ax,BootMessage
9 mov bp,ax
10 mov cx,16
(gdb) list
11 mov ax,01301h
12 mov bx,000ch
13 mov dl,0
14 int 10h
15 ret
16 BootMessage: db "Hello,os world!"
17 times 510-($-$$) db 0
18 dw 0xaa55
(gdb)
benet_1988 2011-03-18
  • 打赏
  • 举报
回复
org 07c00h ; 告诉编译器程序加载到7c00处
mov ax, cs
mov ds, ax
mov es, ax
call DispStr ; 调用显示字符串例程
jmp $ ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 16 ; CX = 串长度
mov ax, 01301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello,os world!"
times 510-($-$$) db 0
dw 0xaa55
benet_1988 2011-03-18
  • 打赏
  • 举报
回复
刚接触qemu+gdb调试这方面的东西。一开始只是想通过一个很简单的引导扇区程序,来验证一下用qemu+gdb调试是否可以达到我预期的效果。
源码如下:
Jee44 2011-03-17
  • 打赏
  • 举报
回复
你的*.bin是内核还是驱动or应用?

21,595

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧