马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
assume cs:codesg
codesg segment
mov ax,4c00H;cs:0000
int 21h
start:
mov ax,0000H
s: nop;cs:0008
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0: jmp short s;cs:0018
s1: mov ax,0
int 21H
mov ax,0
s2: jmp short s1;cs:0020
nop
codesg ends
end start
s的作用,是把s2处jmp short s1的值EBF6复制到s的两个nop处
但经过编译后,cs:0020处的EBF6成了jmp 0018,而cs:0008处的EBF6则变成了jmp 0000,这样运行下来ip就能感受到永远不会到达0018的真实
所以我认为EBF6的意思是从当前cs:ip位置上移8个字节
这样就能解释为啥相同的编码值却看似编译成了不同的结果,
比方说有个人在楼上拿着梯子,梯子上有猴子在爬,
猴子看到桃子就在往上爬8步就能拿到的地方,于是埋头往上爬8步,
爬完8步后抬头一看发现桃子不见了,低头一看才发现自己离桃子高出了好几米,
是自己计算错了吗?
不,是人把梯子往上抬好几米,而猴子在爬的时候没有注意自己早就和桃子擦肩而过,还是死脑筋地往上爬8步。 |