windows内核试验05_中断现场
生活随笔
收集整理的這篇文章主要介紹了
windows内核试验05_中断现场
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- windbg寫入中斷表數據
- VS寫出能運行XP的exe
- 第一步(換平臺工作集)
- 第二步(關閉ASLR)
- 第三步(關閉語言符合模式)
- 運行觀察:
- CS變化
- CE查看GDT表
windbg寫入中斷表數據
eq 8003f500 0040ee00`00081040VS寫出能運行XP的exe
第一步(換平臺工作集)
第二步(關閉ASLR)
第三步(關閉語言符合模式)
#include<stdio.h> #include <stdlib.h> #include<Windows.h>DWORD g_eax[2], g_ecx[2], g_edx[2], g_ebx[2]; DWORD g_esp[2], g_ebp[2], g_esi[2], g_edi[2]; WORD g_cs[2], g_ds[2], g_ss[2], g_es[2], g_fs[2], g_gs[2]; DWORD g_tmp; void __declspec(naked) IdtEntry() {__asm {mov [g_eax+4],eaxmov [g_ecx + 4], ecxmov [g_edx + 4], edxmov [g_ebx + 4], ebxmov [g_esp + 4], espmov [g_ebp + 4], ebpmov [g_esi + 4], esimov [g_edi + 4], edipush eaxmov ax,csmov [g_cs+2],axmov ax, dsmov [g_ds + 2], axmov ax, ssmov [g_ss + 2], axmov ax, esmov [g_es + 2], axmov ax, fsmov [g_fs + 2], axmov ax, gsmov [g_gs + 2], axpop eaxiretd} }void go() {__asm {mov [g_eax], eaxmov [g_ecx], ecxmov [g_edx ], edxmov [g_ebx ], ebxmov [g_esp ], espmov [g_ebp ], ebpmov [g_esi ], esimov [g_edi ], edipush eaxmov ax, csmov [g_cs], axmov ax, dsmov [g_ds], axmov ax, ssmov [g_ss], axmov ax, esmov [g_es], axmov ax, fsmov [g_fs ], axmov ax, gsmov [g_gs ], axpop eax}__asm int 0x20 }int main() {if ((DWORD)IdtEntry != 0x00401040) {printf("wrong addr:%p", IdtEntry);exit(-1);}go();printf("eax:%p,\tecx:%p\t,edx:%p\t,ebx:%p\n", g_eax[0], g_ecx[0], g_edx[0], g_ebx[0]);printf("esp:%p,\tebp:%p\t,esi:%p\t,edi:%p\n", g_esp[0], g_ebp[0], g_esi[0], g_edi[0]);printf("cs:%p,\tds:%p\t,ss:%p\t,es:%p,fs:%p\t,gs:%p\n", g_cs[0], g_ds[0], g_ss[0], g_es[0], g_fs[0], g_gs[0]);printf("eax:%p,\tecx:%p\t,edx:%p\t,ebx:%p\n", g_eax[1], g_ecx[1], g_edx[1], g_ebx[1]);printf("esp:%p,\tebp:%p\t,esi:%p\t,edi:%p\n", g_esp[1], g_ebp[1], g_esi[1], g_edi[1]);printf("cs:%p,\tds:%p\t,ss:%p\t,es:%p,fs:%p\t,gs:%p\n", g_cs[1], g_ds[1], g_ss[1], g_es[1], g_fs[1], g_gs[1]);system("pause"); }運行觀察:
eax:00401040, ecx:11605600 ,edx:00414A74 ,ebx:7FFDE000 esp:0012FF7C, ebp:0012FFC0 ,esi:00156CD0 ,edi:00155C10 cs:0000001B, ds:00000023 ,ss:00000023 ,es:00000023,fs:0000003B ,gs:00000000eax:00401040, ecx:11605600 ,edx:00414A74 ,ebx:7FFDE000 esp:B2B79DCC, ebp:0012FFC0 ,esi:00156CD0 ,edi:00155C10 cs:00000008, ds:00000023 ,ss:00000010 ,es:00000023,fs:0000003B ,gs:00000000上面是三環棧,下面是零環棧,一起來觀察一下:
改變:cs ,ss,esp,
根據邏輯用途分類:
CS變化
原來是1B,后面變成8
8003f000 00000000`00000000 00cf9b00`0000ffff 8003f010 00cf9300`0000ffff 00cffb00`0000ffff這個00000000 00000000 段選擇子是0(如果在三環就+3,零環就+0),00cf9b00 0000ffff段選擇子是8(如果在三環就+3,零環就+0),這個00cf9300 0000ffff段選擇子是0x10(如果在三環就+3,零環就+0),這個是00cffb00 0000ffff段選擇子是0x18(如果在三環就+3,零環就+0)依次往下推
1B段選擇子是1B-3=18,也就是這里00cffb00 0000ffff
8段選擇子是8-0=8,也就是00000000 00000000
平砍段,windows的段保護機制主要是用來進行權限提升用的,并沒有用來數據存儲從而進行實質性的使用;數據代碼存儲機制主要是用于頁保護機制,并非段保護
內核保護—>GDT
CE查看GDT表
這里的話已經把三環和0環全部減掉來算
總結
以上是生活随笔為你收集整理的windows内核试验05_中断现场的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2019编译32位程序运行于XP系统
- 下一篇: windbg模拟器不准确现象