返回信息流又碰上一个低级问题:
就是一个简单的长跳转,跳转后,eip却不是变成正常的0x7d61,却到了别处,程序也因此崩溃,不知道为啥?(实模式,x86)
bochs的调试信息:
(0) Breakpoint 1, 0x00000000000032a4 in ?? ()
Next at t=32586615
(0) [0x000032a4] 0000:32a4 (unk. ctxt): jmp word ptr es:[eax] ; 2667ff20------------------这是下一条要执行的指令,跳转到es:eax之处
<bochs:3> sreg
cs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1
ds:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=3
ss:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=7
es:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1------------es为0x0
fs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1
gs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1
ldtr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
tr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
gdtr:base=0x00070000, limit=0xfffe
idtr:base=0x00000000, limit=0x3ff
<bochs:4> r
rax: 0x00000000:00007d61 rcx: 0x00000000:00009000---------ax为0x7d61:目的地址
rdx: 0x00000000:00003404 rbx: 0x00000000:00000000
rsp: 0x00000000:0000ffda rbp: 0x00000000:00000000
rsi: 0x00000000:ffff0000 rdi: 0x00000000:0008ffac
r8 : 0x00000000:00000000 r9 : 0x00000000:00000000
r10: 0x00000000:00000000 r11: 0x00000000:00000000
r12: 0x00000000:00000000 r13: 0x00000000:00000000
r14: 0x00000000:00000000 r15: 0x00000000:00000000
rip: 0x00000000:000032a4
eflags 0x00000002
id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf
<bochs:5> s---------------------------------------------------执行了这一句之后
Next at t=32586616
(0) [0x000092e4] 0000:92e4 (unk. ctxt): add byte ptr ds:[bx+si], al ; 0000
<bochs:6> r
rax: 0x00000000:00007d61 rcx: 0x00000000:00009000
rdx: 0x00000000:00003404 rbx: 0x00000000:00000000
rsp: 0x00000000:0000ffda rbp: 0x00000000:00000000
rsi: 0x00000000:ffff0000 rdi: 0x00000000:0008ffac
r8 : 0x00000000:00000000 r9 : 0x00000000:00000000
r10: 0x00000000:00000000 r11: 0x00000000:00000000
r12: 0x00000000:00000000 r13: 0x00000000:00000000
r14: 0x00000000:00000000 r15: 0x00000000:00000000
rip: 0x00000000:000092e4-------------------------------------eip变成了这个数,不是0x7d61,我猜测发生了中断
eflags 0x00000002
id vip vif ac vm rf nt IOPL=0 of df if tf sf zf af pf cf
<bochs:7> sreg
cs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1-----------cs倒是变成了0
ds:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=3
ss:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=7
es:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=3
fs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1
gs:s=0x0000, dl=0x0000ffff, dh=0x00009300, valid=1
ldtr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
tr:s=0x0000, dl=0x00000000, dh=0x00000000, valid=0
gdtr:base=0x00070000, limit=0xfffe
idtr:base=0x00000000, limit=0x3ff
不知道为什么,请大家帮助[em18]
这是一条镜像帖。来源:北邮人论坛 / soft-design / #29004同步于 2008/8/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
【求助】小小跳转跳出了神(汇编简单问题)
bupthu
2008/8/14镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
jmp word ptr es:[eax]
eax=7d61,
是跳到[7d61],不是7d61,
即
jmp eax
和
jmp [eax]
是不同的
我觉得你看花眼了吧,上来灌灌水休息一会吧,哈哈。
我有时候看汇编看多了也会晕。
【 在 bupthu (fox_lee) 的大作中提到: 】
: 又碰上一个低级问题:
: 就是一个简单的长跳转,跳转后,eip却不是变成正常的0x7d61,却到了别处,程序也因此崩溃,不知道为啥?(实模式,x86)
: bochs的调试信息:
: ...................
谢谢啊!我是初学者,不是眼花了,是真的不会。谢谢啊!我都调试了2个小时了,呵呵。
[em18][em18][em18][em18][em18][em18]
比我强,我第一次用debug.exe调用16位汇编中断服务时,搞了1天1夜。
【 在 bupthu (fox_lee) 的大作中提到: 】
: 谢谢啊!我是初学者,不是眼花了,是真的不会。谢谢啊!我都调试了2个小时了,呵呵。
: [em18][em18][em18][em18][em18][em18]
【 在 bupthu 的大作中提到: 】
: 谢谢啊!我是初学者,不是眼花了,是真的不会。谢谢啊!我都调试了2个小时了,呵呵。
: [em18][em18][em18][em18][em18][em18]
嗯,呵呵,不急,咱有猫哥
不过建议你再好好复习下汇编咯,基础蛮重要的,2个小时的代价可不小。