Использование GDB для отслеживания гостевой ОС внутри гипервизора, весь работает на Qemu - kvm - PullRequest
0 голосов
/ 02 апреля 2019

Я использую Gdb для отслеживания выполнения (точка останова, пошаговое выполнение и т. Д.) ОС гипервизора в Qemu, и пока она отлично работает.

qemu-system-x86_64 -enable-kvm -display sdl -cpu host -serial my: stdio -m 8192 --bios ../../tool/boot/tianocore.bin -drive format = raw, file = var / run /hypervisor.img -machine q35 -s -S
gdb path/to/hypervisor
target remote: 1234

Теперь мне нужно отследить выполнение гостевой ОС в гипервизоре, все запущенные Qemu. И это не работает. Тем не менее, я добавил файлы символов отладки, относящиеся к ОС, а также изменил архитектуру инструкций.

add-symbol-file ~ / Tinycore / vmlinux 0x100000
add-symbol-file bin / munich 0x18000
set architecture i386: x64_32 // because the guest OS is compiled in 32 bits

Но когда выполнение передает инструкции vmresume, vmlauch и продолжается в гостевой ОС, Gdb сбивается с толку, пошаговое выполнение больше не работает и точки останова заканчиваются на неопределенных адресах.
Кто-нибудь имеет представление о том, что я пропустил?
Или это действительно невозможно?
Есть ли другой способ добиться этого?
Гипервизор, над которым я работаю, - Genode , а гостевая ОС - T inycore Linux .


  1. munich - 32-битный загрузчик, используемый для загрузки Tinycore Linux.
  2. гипервизор, vmlinux и munich - это двоичные файлы, скомпилированные с символами отладки.
...