蓝色旋律 发表于 2012-5-12 17:35:54

监测点2.3疑问

监测点2.3中小鱼老师的解释为ip修改了四次,其中jmp ax修改了两次,我不明白为什么要先读入,在修改,而不是直接执行。那jmp 4e5a也是分两步的吗?

lukexc 发表于 2012-5-12 23:05:40

本帖最后由 lukexc 于 2012-5-12 23:11 编辑

我也是初学者,我来解释下,不晓得对不,高手请拍砖!
第一次是读入jmp ax后,ip自增,第一次改变;
第二次是jmp ax这个指令执行完,将ax赋值给ip,ip第二次改变!

退聊人物;战孜瞳 发表于 2012-5-13 13:11:29

mov ax,bx指令执行到指令的时候IP+1IP修改第3次
sub ax,ax   指令执行到指令的时候IP+1IP修改2次
jmp ax       指令执行到指令的时候IP+1IP修改第3次
在加上JMP修改了IP 所以总共修改了IP次数为4次

花落、季 发表于 2012-5-13 13:25:53

因为ip指向的是下一条将要执行的指令的偏移地址 所以在执行当前指令的时候ip就要加1啊 {:5_93:}

蓝色旋律 发表于 2012-5-13 16:16:21

jmp指令是不是包括如下两条指令呢。mov ip,ax和执行jmp ip

蓝色旋律 发表于 2012-5-13 16:19:51

花落、季 发表于 2012-5-13 13:25 static/image/common/back.gif
因为ip指向的是下一条将要执行的指令的偏移地址 所以在执行当前指令的时候ip就要加1啊

以你的说法,执行到jmp ax时,此时ip指向jmp ax了,就该执行jmp了,然后ip跳到ax的位置了,应该是改变一次啊。

蓝色旋律 发表于 2012-5-13 16:21:28

lukexc 发表于 2012-5-12 23:05 static/image/common/back.gif
我也是初学者,我来解释下,不晓得对不,高手请拍砖!
第一次是读入jmp ax后,ip自增,第一次改变;
第二 ...

请问为什么要读入呢?其他指令操作怎么就不需要读入。而是直接执行呢。

蓝色旋律 发表于 2012-5-13 16:24:22

退聊人物;战孜瞳 发表于 2012-5-13 13:11 static/image/common/back.gif
mov ax,bx指令执行到指令的时候IP+1IP修改第3次
sub ax,ax   指令执行到指令的时候IP+1IP修改2次
j ...

执行完jmp ax后不就直接修改ip并跳转到ax的位置了吗?为什么在这之前要先加1呢?

退聊人物;战孜瞳 发表于 2012-5-13 16:25:58

蓝色旋律 发表于 2012-5-13 16:24 static/image/common/back.gif
执行完jmp ax后不就直接修改ip并跳转到ax的位置了吗?为什么在这之前要先加1呢?

他问的是修改了几次。 执行到jmp的时候修改了2次。。先是+1修改一次然后在根据指令修改一次。

退聊人物;战孜瞳 发表于 2012-5-13 16:30:35

也可以这样告诉你把,将要执行下一条指令的时候 IP会+上1 然后才指引到下个地址

退聊人物;战孜瞳 发表于 2012-5-13 16:31:40

IP不加上一个1怎么指定地址?怎么执行地址那的指令? 这是有先后顺序的。

花落、季 发表于 2012-5-13 21:36:37

楼上说的对!!!

蓝色旋律 发表于 2012-5-14 10:50:22

本帖最后由 蓝色旋律 于 2012-5-14 10:53 编辑

退聊人物;战孜瞳 发表于 2012-5-13 16:31 http://bbs.fishc.com/static/image/common/back.gif
IP不加上一个1怎么指定地址?怎么执行地址那的指令? 这是有先后顺序的。

执行mov ax,bx ------ip加1,修改第一次
mov ax,ax------------ip加1,修改第二次,此时ip指向jmp
jmp ax-------ip直接修改为ax,而不必加1
我的分析是这样的,应该是先执行本条语句,然后才是修改ip,到jmp后ip直接修改,就不会加1了吧。我是这么理解的,有什么问题吗?请赐教。
另确认下,ip是在执行完本条指令后加1以指向下条指令呢,还是先ip加1指向本条指令再执行本条指令。

退聊人物;战孜瞳 发表于 2012-5-14 17:00:58

刚开始IP先加上1指向第一条指令后面类推。

蓝色旋律 发表于 2012-5-14 17:07:22

退聊人物;战孜瞳 发表于 2012-5-14 17:00 static/image/common/back.gif
刚开始IP先加上1指向第一条指令后面类推。

也就是是先ip加1指向下条指令,然后才执行加1前的指令(也就当前指令)?

退聊人物;战孜瞳 发表于 2012-5-14 17:15:47

蓝色旋律 发表于 2012-5-14 17:07 static/image/common/back.gif
也就是是先ip加1指向下条指令,然后才执行加1前的指令(也就当前指令)?

将要开始执行第一条指令的时候 先是IP+1 然后指定第一条指令的地址。 然后和后面的加起来就是4次修改了。

Seely 发表于 2012-5-14 19:37:20

本帖最后由 Seely 于 2012-5-15 13:11 编辑

mov ax,bx   ;执行此指令,第一次。
sub ax,ax      ;执行此指令,第二次。
jmp ax          ;此步修改两次。                  

蓝色旋律 发表于 2012-5-15 10:28:06

Seely 发表于 2012-5-14 19:37 static/image/common/back.gif
mov ax,bx   ;执行此指令,第一次。
sub ax,ax      ;执行此指令,第二次。
jmp ax          ;把 ax 的 ...

第三次已经将ip修改为ax了,执行jmp直接就跳到0处,这次ip应该是不改变值得吧。

蓝色旋律 发表于 2012-5-15 10:35:05

在debug里执行此指令,用t执行后,ip也是现实修改三次啊。

蓝色旋律 发表于 2012-5-15 10:36:26

退聊人物;战孜瞳 发表于 2012-5-14 17:15 static/image/common/back.gif
将要开始执行第一条指令的时候 先是IP+1 然后指定第一条指令的地址。 然后和后面的加起来就是4次修改了。

意思也就是说执行本条指令前,ip先加一指向了下条指令,然后才执行本指令。
页: [1] 2
查看完整版本: 监测点2.3疑问