Как выполнить отладку исходного кода кода x86 с помощью GDB внутри QEMU?
Я написал программу сборки x86 для раздела MBR. Я компилирую это следующим образом:
nasm hellombr.asm -f bin -o hellombr.img
Затем я запускаю его в QEMU:
qemu -fda hellombr.img -boot a
Вопрос в том, как я могу отладить свою программу на уровне исходного кода?
3 ответа
Вы должны позволить nasm
создайте символы отладки в файле ELF, а затем выведите его в плоский двоичный файл для использования в MBR. Затем вы можете поручить GDB прочитать необходимые символы из файла ELF.
Полная процедура стала бы примерно такой:
$ nasm hellombr.asm -f elf -g -o hellombr.elf $ objcopy -O бинарный hellombr.elf hellombr.img $ qemu -s -S -fda hellombr.img -boot загрузить $ gdb (gdb) символьный файл hellombr.elf (gdb) целевой удаленный локальный хост:1234
Для объяснения флагов я перехожу к qemu
увидеть этот ответ.
Вместо использования qemu используйте bochs. Это полностью совместимо, хотя и медленнее. Это также эмулятор, но если вы сделаете его из исходников, используйте эти флаги и создадите его так:
./configure --enable-debugger --enable-disasm --disable-docbook
make
make install
Вы можете устанавливать точки останова в своем коде, проходить через него, просматривать GDT, IDT и все, что вам нужно было знать.
Действительно хороший (и простой) способ - использовать IDA с bochs, здесь вы найдете отличную запись в блоге, а также некоторые другие советы / предложения по разработке загрузчика.