qemu+gdb
запускаю qemu так:
qemu-system-x86_64 -s -S
подключаюсь с помощью gdb
Цитата:
gdb
(gdb) target remote localhost:1234
(gdb) target remote localhost:1234
Remote debugging using localhost:1234
Дялее
Цитата:
0x0000fff0 in ?? ()
(gdb) x/i $pc
=> 0xfff0: add %al,(%eax)
(gdb) display/i $pc
1: x/i $pc
=> 0xfff0: add %al,(%eax)
(gdb) si
0x0000e05b in ?? ()
1: x/i $pc
=> 0xe05b: add %al,(%eax)
(gdb) si
0x0000c81e in ?? ()
1: x/i $pc
=> 0xc81e: add %al,(%eax)
(gdb) si
0x0000c821 in ?? ()
1: x/i $pc
=> 0xc821: add %al,(%eax)
(gdb) si
0x0000c827 in ?? ()
1: x/i $pc
=> 0xc827: add %al,(%eax)
(gdb)
(gdb) x/i $pc
=> 0xfff0: add %al,(%eax)
(gdb) display/i $pc
1: x/i $pc
=> 0xfff0: add %al,(%eax)
(gdb) si
0x0000e05b in ?? ()
1: x/i $pc
=> 0xe05b: add %al,(%eax)
(gdb) si
0x0000c81e in ?? ()
1: x/i $pc
=> 0xc81e: add %al,(%eax)
(gdb) si
0x0000c821 in ?? ()
1: x/i $pc
=> 0xc821: add %al,(%eax)
(gdb) si
0x0000c827 in ?? ()
1: x/i $pc
=> 0xc827: add %al,(%eax)
(gdb)
По сути я щас нахожусь в стартап-коде биоса. При выполнении si инструкции успешно выполняются. Но какого он мне кажет вот это:
Цитата:
add %al,(%eax)
, то есть он думает, что в памяти одни нули. Но В памяти не нули, это также понятно по тому, как изменяется $pc.
Что делать, как заставить его казать нормальный ассемблерный код?
16-битный код исполняется?
Выполняется код начальной загрзки виртуальной машины, то есть код биоса. Он не может быть не 16битным, правильно?
А если вы имели ввиду "выполняется ли 16битный код нормально?" - да, он выполняется нормально. Если выполнить continue, код биоса успешно выполняется и выводит сообщения, что нет носителей с системой.
Если вы обратили внимание, gdb почему то считает сегмент кода 32-битным. От этого могут быть глюки
Цитата: Phodopus
Если вы обратили внимание, gdb почему то считает сегмент кода 32-битным. От этого могут быть глюки
Да обратил внимание. А не подскажете, как переключиться в 16битное представление?
к сожалению плохо знаю gdb и его возможности. погуглите, что то было на эту тему но находилось не сразу.
(gdb) set architecture i8086