|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【学习交流,共同进步】
- assume cs:codesg
- codesg segment ;debug中的初始状态 ;执行到0016时的状态
-
- mov ax,4c00h ;0000 mov ax,4c00 ;0000 mov ax,4c00
- int 21h ;0003 int 21 ;0003 int 21
- start: mov ax,0 ;0005 mov ax,0000 ;0005 mov ax,0000
- s: nop ;0008 nop ;0008 jmp 0000
- nop ;0009 nop
-
- mov di,offset s ;000a mov di,0008 ;000a mov di,0008
- mov si,offset s2 ;000d mov si,0020 ;000d mov si,0020
- mov ax,cs:[si] ;0010 cs: ;0010 cs:
- ;0011 mov ax,[si] ;0011 mov ax,[si]
- mov cs:[di],ax ;0013 cs: ;0013 cs:
- ;0014 mov [di],ax ;0014 mov [di],ax
-
- s0:jmp short s ;0016 jmp 0008 ;0016 jmp 0008
-
- s1:mov ax,0 ;0018 mov ax,0000 ;0018 mov ax,0000
- int 21h ;001b int 21 ;001b int 21
- mov ax,0 ;001d mov ax,0000 ;001d mov ax,0000
-
- s2:jmp short s1 ;0020 jmp 0018 ;0020 jmp 0018
- nop ;0022 nop ;0022 nop
-
- codesg ends
- end start
复制代码
小甲鱼老师讲的很好了,但是可能因为我是倍速看的,做这个的时候,我是蒙蔽了一下子的。(没看后面的小甲鱼老师的讲解)因为我复制一个汇编指令换个地方,汇编指令自己就变了。woc,计算机有思维了吗?那肯定不是的。
所以,我来讲一下我的思考。
我们可以看到debug里面jmp后面是指向具体的ip地址,而我们复制换了一个地方后,jmp后面的ip地址变了。
所以得出,机器码表示了向前或者向后的偏移地址,右边debug中的汇编指令是机器码的计算结果,也就是具体ip地址。
正是因为如此,就是因为我们复制一个代码时,复制的是机器码,汇编代码是由此处的机器码经过运算得到的,所以就算一样的机器码,在不同的地方,翻译出来的汇编指令也可能会不一样。
很绕口,大家意会一下,相信大家都懂。 |
|