ubicaciones de memoria incorrectas al depurar en qemu con gdb

Estoy escribiendo un pequeño núcleo en ensamblador. Lo estoy ejecutando en QEMU y tengo algunos problemas con algunos errores. Ahora quiero depurar el kernel con dbg. Entonces lo ensamblé así:

$ nasm -g -f elf -o myos.elf myos.asm
$ objcopy --only-keep-debug myos.elf myos.sym
$ objcopy -O binary myos.elf myos.bin

Luego lo ejecuto en QEMU con:

$ qemu-system-i386 -s -S myos.bin

Luego me conecto con gdb:

$ gdb
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
0x0000fff0 in ?? ()
symbol-file myos.sym
Reading symbols from /home/sven/Projekte/myos/myos.sym...done.

Tengo una etiqueta llamadawelcome en mi kernel que apunta a una cadena. Mientras probaba, traté de mirar esa cadena, que dio el siguiente resultado:

(gdb) x/32b welcome
0x1e <welcome>: 0x00    0xf0    0xa5    0xfe    0x00    0xf0    0x87    0xe9
0x26:   0x00    0xf0    0x6e    0xc9    0x00    0xf0    0x6e    0xc9
0x2e:   0x00    0xf0    0x6e    0xc9    0x00    0xf0    0x6e    0xc9
0x36:   0x00    0xf0    0x57    0xef    0x00    0xf0    0x6e

La etiqueta se define así:

welcome: db "System started. Happy hacking!", 10, 0

Como puede ver, gdb está fingiendo que la bienvenida comienza con un byte nulo, pero por definición no lo es. Sin embargo, el núcleo utiliza la etiqueta correctamente, por lo que no parece un problema con mi código. Examinar otras partes de la memoria no coincide en absoluto con el núcleo cargado.

¿Alguien sabe por qué la memoria de la máquina virtual no coincide con el núcleo cargado, mientras que la máquina todavía se comporta correctamente?

Respuestas a la pregunta(1)

Su respuesta a la pregunta