неправильные места памяти при отладке в qemu с помощью gdb
Я пишу немного ядра на ассемблере. Я запускаю его в QEMU и у меня есть проблемы с некоторыми ошибками. Теперь я хочу отладить ядро с помощью dbg. Итак, я собрал это так:
$ nasm -g -f elf -o myos.elf myos.asm
$ objcopy --only-keep-debug myos.elf myos.sym
$ objcopy -O binary myos.elf myos.bin
Затем я запускаю его в QEMU с помощью:
$ qemu-system-i386 -s -S myos.bin
Затем я соединяюсь с 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.
У меня есть ярлык с именемwelcome
в моем ядре, которое указывает на строку. Во время тестирования я попытался посмотреть на эту строку, которая дала следующий результат:
(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
Метка определяется следующим образом:
welcome: db "System started. Happy hacking!", 10, 0
Итак, вы можете видеть, что GDB притворяется, что приветствие начинается с нулевого байта, но по определению это не так. Однако ядро использует метку правильно, так что это не похоже на проблему с моим кодом. Исследование других частей памяти вообще не соответствует загруженному ядру.
Кто-нибудь знает, почему память виртуальной машины не совпадает с загруженным ядром, в то время как машина все еще ведет себя корректно?