No he probado todos los kernel debuggers para linux, pero lo mas decente que he encontrado para representar las estructuras es ddd conectado por tap0 al qemu en modo -s.
1. Bajar fuentes del kernel a depurar
En el kernel activaremos la compatibilidad .config
Como que depuraremos ese kernel bajo qemu, podemos tener todas las opciones de debug activadas, princincipalmente estas.
.config
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_STACKOVERFLOW=y
CONFIG_DEBUG_PAGEALLOC=y
compilaremos con make
2. Necesitamos generar un image.img con dd, formateamos (por ej ext2) y creamos un subsitema linux por ej con un debian debootstrap :)
la montamos:
modprobe loop
mount image.img img/ -o loop
si no carga el driver loop fijo k lo tienes, buscalo ;)
3. qemu
Tenemos la imagen de disco image.img, el kernel comprimido bzImage y sin comprimir vmlinux
Botamos qemu con la imagen de disco y el bzImage
qemu -boot c -kernel linux-2.6.*.*/arch/i386/boot/bzImage -hda ./image.img -append "root=/dev/hda clock=pit" -s
el -s es el modo kernel debug por el puerto 1234
4. ddd o gdb
ddd tiene la ventaja que podremos dibujar las estructuras.
Arrancamos el ddd con el vmlinux recien compilado. (no sirve bzImage)
ddd vmlinux
(gdb) target remote localhost:1234
vamos a chequearlo:
(gdb) b sys_open
(gdb) c
probamos por ej un simple ls que invocara la syscall open
Ahora con el ddd podremos displayar cualquier estructura por ej:

kernel developer sha0wiki
fuente: http://jolmos.blogspot.com/2008/06/kernel-hacking.html
No hay comentarios:
Publicar un comentario