|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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步。 |
评分
-
查看全部评分
|