Как разобрать 16-битный код загрузочного сектора x86 в GDB с помощью «x / i $ pc»? Это рассматривается как 32-разрядный

Например, с загрузочным сектором, который печатает BIOSa на экранmain.asm:

org 0x7c00
bits 16
cli
mov ax, 0x0E61
int 0x10
hlt
times 510 - ($-$) db 0
dw 0xaa55

Затем:

nasm -o main.img main.asm
qemu-system-i386 -hda main.img -S -s &
gdb -ex 'target remote localhost:1234' \
    -ex 'break *0x7c00' \
    -ex 'continue' \
    -ex 'x/3i $pc'

Я получил:

0x7c00:      cli    
0x7c01:      mov    $0x10cd0e61,%eax
0x7c06:      hlt 

Так выглядитmov ax, 0x0E61 был интерпретирован как 32-разрядныйmov %eax и съел следующую инструкциюint 0x10 как данные.

Как я могу сказать GDB, что это 16-битный код?

Смотрите также:

в 2007 году разработчик GDB ответил "использоватьobjdump" https://www.sourceware.org/ml/gdb/2007-03/msg00308.html как объяснено вКак мне разобрать сырой код x86? Может быть, это было реализовано тем временем?надстройка:Использование GDB в 16-битном режимепохоже, но у ОП там была ошибка, так может это что то другое?Как мне разобрать win16 с GDB

Ответы на вопрос(0)

Ваш ответ на вопрос