|
主题 : : jmp跳转指针如何变化 [待解决] |
回复[ 7次 ]
点击[ 517次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-12-30 09:08 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-12-12 12:10 |
程序是这样的:
mov ax,8
jmp ax
mov ax,0
mov bx,ax
jmp bx
不知道指针IP是怎么变化的啊,请各位高手帮帮忙! | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-12-30 11:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
这个问题和检测点2.3是一样的。所以看了下楼主的博客..
[ tianyu_lianxin 发表于 2008-12-23 21:02 ]
有点理解了,是程序执行到JMP AX后,有一次改变,但由于执行了JMP AX ,IP又被改变了一次。
------------
这是楼主的回答,不过好像楼主只是“得过且过”了,没有研究这个问题,在知道了这个问题一周后依然没有明白其中的知识而向下学习了。
这个知识点是比较简单的,根据书中的介绍,cpu每读入一条指令后ip就会自动增加,指向下一条指令。比如检测题2.3的答案是4次修改ip,其中三次修改就是这个原因,而第四次是因为jmp指令的特性而更改了一次ip。
这个题同理。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-01-04 10:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2008-12-12 12:10 |
说的是,当时是有点理解,但是有点不是十分肯定,看了论坛他们的解释又有点乱。
你看我现在理解的对不对啊:
指针初始化,改变一次,也就是指向mov ax,8
执行mov ax,8 改变一次,指针指向jmp ax
执行jmp ax 改变两次,指针指向mov ax,0 ,由于jmp是跳转指令所以指针改为指向mov bx,ax
mov ax,0
执行mov bx,ax 改变一次,指针指向jmp bx
执行jmp bx 改变两次,指针指向下一条指令,由于jmp是跳转指令所以指针改为指向mov bx,ax | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-01-04 21:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:35
信誉值:44
注册日期:2008-09-03 21:36 |
呵呵 楼主理解也没错
mov ax,8 JMP AX
执行 mov ax,8后
cpu 指向 JMP AX
执行JMP AX=debug中(RIP)
cpu从cs:8处读取指令 | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-02-17 16:54 ]
[引用]
[回复]
[ top ] | |
荣誉值:2
信誉值:4
注册日期:2009-01-15 22:41 |
cpu 执行过程:
1. (ip)= (ip) + 当前读入指令缓冲寄存器的指令的长度
2. 执行读入指令缓冲寄存器的指令 | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-03-05 16:26 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2008-08-19 14:12 |
-a
1374:0100 mov ax,8
1374:0103 jmp ax
1374:0105 mov ax,0
1374:0108 mov bx,ax
1374:010A jmp bx
1374:010C
-t
AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0103 NV UP EI PL NZ NA PO NC
1374:0103 FFE0 JMP AX
-t
AX=0008 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=0008 NV UP EI PL NZ NA PO NC
1374:0008 1DF04F SBB AX,4FF0
-t
AX=B018 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=000B NV UP EI NG NZ NA PE CY
1374:000B 03D8 ADD BX,AX
-t
AX=B018 BX=B018 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1374 ES=1374 SS=1374 CS=1374 IP=000D NV UP EI NG NZ NA PE NC
1374:000D 0D8A03 OR AX,038A
-t
-d
1374:0100 B8 08 00 FF E0 B8 00 00-89 C3 FF E3 00 00 00 00 ................
1374:0110 00 00 00 00 00 00 00 00-00 00 00 00 34 00 63 13 ............4.c.
1374:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1374:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1374:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1374:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1374:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
1374:0170 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ | | |
|
|
|
|
[第6楼]
[ 回复时间:2009-03-05 16:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2008-08-19 14:12 |
-u 100
1374:0100 B80800 MOV AX,0008
1374:0103 FFE0 JMP AX
1374:0105 B80000 MOV AX,0000
1374:0108 89C3 MOV BX,AX
1374:010A FFE3 JMP BX | | |
|
|
|
|
[第7楼]
[ 回复时间:2009-03-05 17:20 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2008-08-19 14:12 |
SBB和OR也出来了。。。。是DEBUG还是JMP指令带来的。。。 | | |