[will be translated]
He 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
He 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
Comentarios