作者ericwang1017 (Eric)
看板LinuxDev
标题[问题] QEMU+GDB 开机, int 跳不过去的问题
时间Sat Mar 23 12:04:27 2013
各位版大好
我使用 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
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.169.183.75
1F:→ ericwang1017:不知道是不是AMD 64 bit 的关系? 03/23 18:04
※ 编辑: ericwang1017 来自: 118.169.183.75 (03/23 19:24)
2F:→ ericwang1017:位置有打错, 已修正 03/23 19:25