王爽汇编实验(八)

分析下面的程序,在运行前思考:这个程序可以正确返回吗?

运行后再思考:为什么时这种结果?

通过这个程序加深对相关内容的额理解。

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

初看时到s1,然后是返回中止?

不多说,运行分析

是从start开始的指令,与想法没错,end start告诉了masm那里是入口

 

JMP 0008是S的标号地址,后来JMP 0000 这样一来发现了原本的IP是0005,是前面两个返回语句,是直接略过的

 

jmp 0008下一条是jmp0000,nop执行后分配90H机器码空间,跳转到codesg 结束

 

总的来说,就是在s:那里,cs:si传到cs:di,但是是传送机器码,也即传送s2到s1的偏移地址F6表示-10,然后用s2的内容覆盖s中前2个nop的位置,后来转到s,就结束了。

 

posted @ 2019-11-23 08:26  世界を変える御宅族  阅读(241)  评论(0编辑  收藏  举报