Как выполнить отладку исходного кода кода x86 с помощью GDB внутри QEMU? - PullRequest
5 голосов
/ 27 ноября 2011

Я написал программу сборки x86 для раздела MBR.Я компилирую его следующим образом:

nasm hellombr.asm -f bin -o hellombr.img

Затем я запускаю его в qemu:

qemu -fda hellombr.img -boot a

Вопрос в том, как я могу отладить мою программу на уровне исходного кода?

Ответы [ 3 ]

4 голосов
/ 30 апреля 2012

Вы должны позволить nasm создать символы отладки в файле ELF и затем вывести их в плоский двоичный файл, который будет использоваться в MBR. Затем вы можете поручить GDB прочитать необходимые символы из файла ELF.

Полная процедура станет примерно такой:

$ nasm hellombr.asm -f elf -g -o hellombr.elf
$ objcopy -O binary hellombr.elf hellombr.img
$ qemu -s -S -fda hellombr.img -boot a
$ gdb
(gdb) symbol-file hellombr.elf
(gdb) target remote localhost:1234

Для объяснения флагов, которые я передаю qemu, см. этот ответ.

1 голос
/ 27 декабря 2011

Вместо qemu используйте bochs . Это полностью совместимо, хотя и медленнее. Это также эмулятор, но если вы делаете это из исходников, используйте эти флаги и собираете его так:

./configure --enable-debugger --enable-disasm --disable-docbook
make
make install

вы можете устанавливать точки останова в своем коде, проходить по ним, просматривать GDT, IDT и все, что вам нужно было знать.

0 голосов
/ 27 декабря 2011

Действительно хороший (и простой) способ - использовать IDA с bochs, здесь вы найдете отличную запись в блоге здесь , а также некоторые другие советы / предложения по разработке загрузчика.

...