好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 BeneficialWeb 于 2019-9-2 15:15 编辑
工具:VMMWare vs2017, WinDbgPrew,PCHunter64
平台:win7x64虚拟机
声明:本次实验是基于周壑大佬的视频自学而成。
实验目的:主要是观察ring3进ring0的权限变化,观察寄存器的变化
实验步骤:
1.通过双机调试构造int 20号中断处理例程
2.编写代码读取两个环境下的寄存器
3.观察实验结果
[Asm] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | .data
EXTERN g_rbp: DQ
EXTERN g_rax: DQ
EXTERN g_rcx: DQ
EXTERN g_rbx: DQ
EXTERN g_rdx: DQ
EXTERN g_rsi: DQ
EXTERN g_rdi: DQ
EXTERN g_rsp: DQ
EXTERN g_cs: DW
EXTERN g_fs: DW
EXTERN g_ds: DW
EXTERN g_ss: DW
EXTERN g_gs: DW
EXTERN g_es: DW
.code
IdtEntry PROC
mov [g_rax+8],rax
mov [g_rbx+8],rbx
mov [g_rcx+8],rcx
mov [g_rbp+8],rbp
mov [g_rsi+8],rsi
mov [g_rdi+8],rdi
mov [g_rsp+8],rsp
mov [g_rdx+8],rdx
mov word ptr [g_cs+2], cs
mov word ptr [g_ds+2], ds
mov word ptr [g_ss+2], ss
mov word ptr [g_fs+2], fs
mov word ptr [g_es+2], es
mov word ptr [g_gs+2], gs
iretq
IdtEntry ENDP
go PROC
mov [g_rax],rax
mov [g_rbx],rbx
mov [g_rcx],rcx
mov [g_rbp],rbp
mov [g_rsi],rsi
mov [g_rdi],rdi
mov [g_rsp],rsp
mov [g_rdx],rdx
mov word ptr [g_cs], cs
mov word ptr [g_ds], ds
mov word ptr [g_ss], ss
mov word ptr [g_fs], fs
mov word ptr [g_es], es
mov word ptr [g_gs], gs
int 20h
ret
go ENDP
END
|
[C] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | #include<stdlib.h>
#include<stdio.h>
#include<Windows.h>
extern VOID IdtEntry();
extern VOID go();
DWORD64 g_rax[2], g_rbx[2], g_rcx[2], g_rdx[2], g_rbp[2],g_rsi[2],g_rdi[2],g_rsp[2];
WORD g_cs[2], g_ds[2], g_ss[2], g_es[2], g_fs[2], g_gs[2];
void main()
{
if (IdtEntry != 0x140001210)
{
printf ( "error address:%p\n" , IdtEntry);
exit (-1);
}
go();
printf ( "rax:%p\r\nrbx:%p\r\nrcx:%p\r\nrdx:%p\r\nrbp:%p\r\nrsp:%p\r\nrsi:%p\r\nrdi:%p\r\n" , g_rax[0], g_rbx[0], g_rcx[0], g_rdx[0], g_rbp[0], g_rsp[0], g_rsi[0], g_rdi[0]);
printf ( "cs:%04x\r\nds:%04x\r\nss:%04x\r\nes:%04x\r\nfs:%04x\r\ngs:%04x\r\n" , g_cs[0], g_ds[0], g_ss[0], g_es[0], g_fs[0], g_gs[0]);
printf ( "\n" );
printf ( "rax:%p\r\nrbx:%p\r\nrcx:%p\r\nrdx:%p\r\nrbp:%p\r\nrsp:%p\r\nrsi:%p\r\nrdi:%p\r\n" , g_rax[1], g_rbx[1], g_rcx[1], g_rdx[1], g_rbp[1], g_rsp[1], g_rsi[1], g_rdi[1]);
printf ( "cs:%04x\r\nds:%04x\r\nss:%04x\r\nes:%04x\r\nfs:%04x\r\ngs:%04x\r\n" , g_cs[1], g_ds[1], g_ss[1], g_es[1], g_fs[1], g_gs[1]);
system ( "pause" );
}
|
实验结果:
结果分析验证:
应该是没问题了。
总结:
在实验中学习保护模式,就不那么枯燥无聊了。
|
免费评分
-
查看全部评分
|