Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14203
  • 博文数量: 4
  • 博客积分: 155
  • 博客等级: 入伍新兵
  • 技术积分: 70
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-28 18:28
文章分类
文章存档

2011年(4)

我的朋友

分类: LINUX

2011-03-20 12:21:20

Qemu调试Linux kernel或者rootkits是完美搭配,在此写一下实用的调试技巧:

对于Qemu安装、编译Linux之类的不再累述了,总之调试的时候这几样是必须的:

qemu

bzImage

rootfs(随便那种fs格式,只要你的kernel中支持)

1. 直接在终端调试Linux。

qemu –kernel ./bzImage –hda ./rootfs –append “root=/dev/sda rw console=ttyS0,115200n8 console=tty0” –nographic

以上跟的几个参数都是必需的,其中-kernel指的就是linux内核镜像的路径;-hda表示的一个硬盘的参数,这跟你的内核boot参数相关,也就是root=/dev/sda,在这里指的就是你做的根文件系统;为了向内核传递参数,需要通过-append来加参数,这里的“root=/dev/sda rw console=ttyS0,115200n8 console=tty0”就是传递的参数,root是跟文件系统的所在的第一个磁盘或分区,这里就是qemu模拟的hda,也就是上面给的rootfs了,后面还跟了rw,表明可读可写;为了直接在当前终端中打印出来,qemu把当前终端模拟成一个默认串口(不要加参数,默认就在),在被调试的Kernel中看到的就是ttyS0了,所以要设置console为ttyS0,跟上串口设置,波特率115200及其他;最后一个参数:-nographic,就是不要图形界面了,也就是不通过界面或者vnc来调试,可以省下开销,如果你调试Linux没有什么图形,那就用上,如果要图形,那就去掉。

2. 通过gdb调内核或驱动。

qemu集成了gdbserver, 只要再加参数-gdb就可以了;在上面再加-gdb tcp::1234,后面是调试方式tcp和主机IP+端口,在本机就不用主机IP了,直接开个不用的端口就行了。

启动qemu后,可以在开终端用gdb来调试qemu上的linux:

gdb /vmlinux

vmlinux是编译出来的没经过压缩的内核,里面包含了符号表,gdb需要符号表才可以调得开心。在gdb中用target命令连接到qemu的gdbserver:

(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0xc1007d89 in ?? ()
(gdb)

接下就自己调试了。

阅读(980) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~