|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 真·不明人士 于 2014-12-25 22:55 编辑
RT 以下是我自己通过运行整理出的思路(我只是看书 没看甲鱼哥的视频):
1.先贴出汇编指令与对应的机器码
- assume cs:codesg
- codesg segment
- ;机器码
- mov ax,4c00h ;B8 00 4C
- int 21h ;CD 21
- start: mov ax,0 ;B8 00 00
- s: nop ;90
- nop ;90
-
- mov di,offset s ;BF 08 00
- mov si,offset s2 ;BF 08 00
- mov ax,cs:[si] ;2E——8B 04
- mov cs:[di],ax ;2E——89 05
-
- s0: jmp short s ;EB F0
-
- s1: mov ax,0 ;B8 00 00
- int 21h ;CD 21
- mov ax,0 ;B8 00 00
-
- s2: jmp short s1 ;EB E6
- nop ;90
-
- codesg ends
- end start
复制代码
2.程序开始运行
①mov ax,0
②nop * 2 ; 空指令,每个占一个字节
③mov di,offset s ;将s段的偏移地址装入di
④mov si,offset s2 ;将s2段的偏移地址装入si
⑤mov ax,cs:[si] ;将jmp short s1对应的机器码装入ax
⑥mov mov cs:[di],ax ;将ax装入cs:[di] 即将 nop * 2替换成 jmp short s1
⑦jmp short s ;向前转移指令,计算到s的偏移量AC并偏移到s处
⑧jmp short s1 ;向后转移指令,无法计算s1到s的偏移量AC,转而使用当前指令的偏移量作为AC值即为8向上偏移 ???
⑨mov ax,4c00h int 21h ;结束程序
请教各位鱼油是否是如此
|
|