Как выполнить отладку исходного кода кода 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, здесь вы найдете отличную запись в блоге, а также некоторые другие советы / предложения по разработке загрузчика.

Другие вопросы по тегам