[問題] QEMU+GDB 開機, int 跳不過去的問題

作者: ericwang1017 (Eric)   2013-03-23 12:04:27
各位版大好
我使用 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
作者: ericwang1017 (Eric)   2013-03-23 18:04:00
不知道是不是AMD 64 bit 的關係?位置有打錯, 已修正

Links booklink

Contact Us: admin [ a t ] ucptt.com