各位版大好
我使用 QEMU -fda os.img -s -S + GDB remote 去 debug 我自己很简单的 asm
在使用 target remote localhost:1234 之后很顺利的连线到了qemu
下断点 b *0x7c00 也可以顺利地停在 eip 0x7c00
我第一个指令是
ljmp $0x07C0, $_start
但遇到个一个问题, ljmp 虽然可以把 CS:IP 设为 0x07c0:0, 但是之后的int 10使用 si 或是ni 就一去不回头了
对int 10之后下断点也没用(例如对fin下断点, 并不会在那边中断)
但是如果ld使用 -Ttext = 0x7c00 , 并且注解掉ljmp $0x07C0, $_start的话
cs = 0 , eip = 0x7c00 时, 似乎GDB 就可以让我使用int 10
而且这两种写法, qemu 都可以正常模拟, 只是CS:IP 设为 0x07C0:0这种情况的 gdb 不给debug
是我 gdb 的参数没有设好吗, 我也设过 set architecture i8086 似乎也没用
code 如下
.code16
ljmp $0x07C0, $_start
_start:
mov %cs,%ax
mov %ax,%ds
mov %ax,%es
mov $0xFF00, %sp
mov $12,%cx
mov $MsgMove, %ax
mov %ax, %bp
mov $0x1301,%ax
mov $0x00c,%bx
int $0x10
fin:
hlt
jmp fin
MsgMove:.ascii "Hello World!"
.org 510
.word 0xaa55