【汇编】 13.3 对int iret和栈的深入理解

书中示例

复制代码
assume cs:code

code segment
start:
	mov ax,cs
	mov ds,ax
	mov si,offset lp
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset end0-offset lp
	cld
	rep movsb	;lp到end0的指令传送到0:200处
	mov ax,0
	mov es,ax
	mov word ptr es:[7ch*4],200h
	mov word ptr es:[7ch*4+2],0	
	;设置7c表项的入口地址为0000:0200,也就是int 7ch时,执行lp到end0的指令

	mov ax,0b800h
	mov es,ax
	mov di,160*12
	;设置bx的位移
	mov bx,do0-se
	mov cx,80
do0:	
	
	mov byte ptr es:[di],'!'
	add di,2
	int 7ch	;中断,cs和ip入栈。cs为do0所在的段地址,ip为执行完int 7ch后下一条指令的偏移地址
	;此时栈顶是se的偏移地址		
se:	
	nop
	mov ax,4c00h
	int 21h

lp:	push bp	;bp入栈,此时栈顶是bp
	mov bp,sp		;当前栈顶的偏移地址。
	dec cx
	jcxz lpret	;cx=0则转移到lpret,否则继续执行
	add [bp+2],bx	;bp+2为se的偏移地址
	;此时ip=se+bx=se+do0-se=do0

lpret:
	pop bp	;bp出栈
	iret	;ip、cs、flag依次出栈,此时ip=d0的偏移地址
	;也就是回到do0标号处继续执行指令,直到cx=0,ip=se的偏移地址。
end0:
	nop 
	mov ax,4c00h
	int 21h

code ends
end start 

可能还可以优化,这代码看着有点多。

检测点13.1

同上。

复制代码
assume cs:code
data segment
	db 'conversation',0
data ends
code segment
start:
	mov ax,cs
	mov ds,ax
	mov si,offset lp
	mov ax,0
	mov es,ax
	mov di,200h
	mov cx,offset end0-offset lp
	cld
	rep movsb	;lp到end0的指令传送到0:200处
	mov ax,0
	mov es,ax
	mov word ptr es:[7ch*4],200h
	mov word ptr es:[7ch*4+2],0	
	;设置7c表项的入口地址为0000:0200,也就是int 7ch时,执行lp到end0的指令

	mov ax,0b800h
	mov es,ax
	mov ax,data
	mov ds,ax
	mov di,160*12
	mov si,0
	;设置bx的位移
	mov bx,offset s-offset ok
s:	
	cmp byte ptr [si],0
	je ok
	mov al,[si]
	mov es:[di],al
	mov byte ptr es:[di+1],2
	inc si
	add di,2
	int 7ch	;中断,cs和ip入栈。cs为s所在的段地址,ip为执行完int 7ch后下一条指令的偏移地址
	;此时栈顶是ok的偏移地址		
ok:	
	mov ax,4c00h
	int 21h

lp:	push bp	;bp入栈,此时栈顶是bp
	mov bp,sp		;当前栈顶的偏移地址。
	dec cx
	jcxz lpret	;cx=0则转移到lpret,否则继续执行
	add [bp+2],bx	;bp+2为ok的偏移地址
	;此时ip=ok+bx=ok+s-ok=s

lpret:
	pop bp	;bp出栈
	iret	;ip、cs、flag依次出栈,此时ip=s的偏移地址
	;也就是回到do0标号处继续执行指令,直到cx=0,ip=ok的偏移地址。
end0:
	nop 
	mov ax,4c00h
	int 21h

code ends
end start 
相关推荐
万法若空1 天前
8086/8088实模式的内存布局
汇编
浩浩测试一下2 天前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
一品人家2 天前
win32汇编使用GDI+入门教程之九
汇编·windows·win32汇编
虚构之人3 天前
二进制漏洞挖掘(WinAFL Fuzzing)Windows篇
汇编·网络安全·信息安全·系统安全
一品人家5 天前
win32汇编使用GDI+入门教程之六
汇编·windows·win32汇编
前端菜鸟日常6 天前
鸿蒙开发实战:100 个项目疑难杂症汇编
汇编·华为·harmonyos
188号安全攻城狮7 天前
【PWN】HappyNewYearCTF_9_ret2syscall
linux·汇编·安全·网络安全·系统安全
万法若空7 天前
Vim常用指令汇编
汇编·编辑器·vim
请输入蚊子8 天前
«操作系统真像还原» 第二章 编写MBR主引导记录
linux·汇编·操作系统·bochs·操作系统真像还原
188号安全攻城狮8 天前
【PWN】HappyNewYearCTF_8_ret2csu
linux·汇编·安全·网络安全·系统安全