工具:VMMWare vs2017, WinDbgPrew,PCHunter64
平台:win7x64虚拟机
声明:本次实验是基于周壑大佬的视频自学而成。
实验目的:主要是观察ring3进ring0的权限变化,观察寄存器的变化
实验步骤:
1.通过双机调试构造int 20号中断处理例程
2.编写代码读取两个环境下的寄存器
3.观察实验结果
[Asm] 纯文本查看 复制代码.dataEXTERN g_rbp:DQEXTERN g_rax:DQEXTERN g_rcx:DQEXTERN g_rbx:DQEXTERN g_rdx:DQEXTERN g_rsi:DQEXTERN g_rdi:DQEXTERN g_rsp:DQEXTERN g_cs:DWEXTERN g_fs:DWEXTERN g_ds:DWEXTERN g_ss:DWEXTERN g_gs:DWEXTERN g_es:DW.codeIdtEntry 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 iretqIdtEntry ENDPgo 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 retgo ENDPEND
[C] 纯文本查看 复制代码#include#include#includeextern 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(){ // r idtr // dp fffff80000b95080 l42 // ep fffff800`054e9280 4000ee00`00101200 00000000`00000001 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");}
实验结果:
结果分析验证:
应该是没问题了。
总结:
在实验中学习保护模式,就不那么枯燥无聊了。
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |