《汇编语言》——实验八:分析一个奇怪的程序

孤街醉人 提交于 2020-02-22 22:03:40

实验八————分析一个奇怪的程序

assume cs:codesg

codesg segment

	mov ax,4c00h
	int 21h
start:  mov ax,0
s:	nop
	nop

	mov di,offset s
	mov si,offset s2
	mov ax,cs:[si]
	mov cs:[di],ax

s0:     jmp short s

s1:     mov ax,0
	int 21h
	mov ax,0
s2:     jmp short s1
	nop

codesg ends
end start

使用debug调试程序

  • 程序在start处开始执行,mov ax,0000,指令偏移地址CS:0005
  • 下一行指令,nop,s标号指向偏移地址CS:0008
  • 下一行指令,nop,指令偏移地址CS:0009
  • 下一行指令,mov di,0008,指令偏移地址CS:000A
  • 下一行指令,mov si,0020,指令偏移地址CS:000D
  • 下一行指令,mov ax,[si],指令偏移地址CS:0010,即将CS:0020处的机器码存入ax寄存器中
  • 下一行指令,mov [di],ax,指令偏移地址CS:0014,即将ax中存储的机器码填在s标号CS:0008处的内存中
  • 下一行指令,jmp 0008,跳转到s标号CS:0008
  • 此时我们注意,s2标号处指令所对应的机器码,它是使用位移转移的jmp指令,所以在s标号处执行jmp 0000,因为jmp short s1对应是将IP-10
  • 所以最后跳转到结束指令

尝试戏耍一下系统,但别把自己绕晕了

关键:理解jmp指令的跳转方式!!!
要实践,把书上的代码自己打一遍、debug一遍

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!