马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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地址。
正是因为如此,就是因为我们复制一个代码时,复制的是机器码,汇编代码是由此处的机器码经过运算得到的,所以就算一样的机器码,在不同的地方,翻译出来的汇编指令也可能会不一样。
很绕口,大家意会一下,相信大家都懂。 |