⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rw.asm

📁 windows下汇编语言 学习汇编语言好助手
💻 ASM
字号:
;**************************************************************
;文件:rw.asm                                                 *
;功能:在WIN 95/98中访问物理内存                              *
;在WIN 95/98里打开DOS窗口,用ALT-ENTER热键切换到全屏幕,      *
;在命令行方式下运行此程序。                                   *
;也可在SOFT-ICE FOR WIN 95/98的全屏方式下按F8单步跟踪看结果。 *
;**************************************************************
.386p
.model flat,stdcall
include win32.inc
extrn ExitProcess:PROC

CALL32 MACRO selector ,offsetv
        DB 09AH
        DD offsetv
        DW selector
       ENDM

AddressToWrite  equ 0B8000H			;要写的地址

.data
	Data    dw 10*80 dup (0e41H)	;要写的数据
	DataLeng = $-Data

.code
Start:
	push offset MyProc				;切换到Ring0并调用MyProc
	call ToRing0Code				;
	call ExitProcess,0				;退出进程
	
ToRing0Code proc Ring0Proc:DWORD	;生成调用门,进入Ring0处理程序Ring0Proc
	LOCAL Temp,Temp1
	call GetLdtAddress				;取出LDT的地址,返回结果在eax中
	mov  ecx,[eax]					;保存LDT第一个描述符
	mov  [Temp],ecx					;
	mov  ecx,[eax+4]					;
	mov  [Temp1],ecx					;
	mov  edx,Ring0Proc				;把调用门的内容写入LDT
	mov  [eax],dx					;偏移量的低16位
	mov  word ptr [eax+2],28h		;段选择子
	mov  word ptr [eax+4],0ec00h		;属性
	shr  edx,16						;偏移量的高16位
	mov  [eax+6],dx					;
	push eax	
	CALL32 7,0						;调用 Ring0 子程序
	pop  ebx
	mov  edx,[Temp]					;恢复LDT第一个描述符
	mov  [ebx],edx					;
	mov  edx,[Temp1]				;
	mov  [ebx+4],edx				;
	ret
ToRing0Code endp 	
GetLdtAddress proc			;取LDT的地址
	push ebx				;先要取GDT的地址
	sgdt [esp-2]			;
	pop  ebx				;
	sldt ax					;取LDT内容
	and  eax,0fff8H			;屏蔽掉低3位、eax的高16位清0
	add  ebx,eax			;算出LDT描述符的位置
	mov  eax,[ebx+2]		;从描述符中取出LDT的地址
	mov  dl,[ebx+7]			;
	shl  edx,24				;
	and  eax,0ffffffh		;
	or   eax,edx				;
	ret
GetLdtAddress endp
	
MyProc:						;Ring0 处理程序,写指定的物理内存
	push AddressToWrite
	int  20H				;VxDCall _MapPhysToLinear
	dd   0001006cH			;
	add  esp,4				;调整堆栈指针

	cli
	push ds
	push es
	mov  bx,30H				;设定数据段
	mov  ds,bx				;
	mov  es,bx				;
	cld
	mov  ecx,DataLeng/4		;传送数据
	mov  esi,offset Data		;
	mov  edi,eax				;
	rep  movsd				;
	pop  es
	pop  ds
	sti
	RETF					;远程返回
	
	END Start
		

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -