日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows内核试验05_中断现场

發(fā)布時間:2025/3/21 windows 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows内核试验05_中断现场 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • windbg寫入中斷表數(shù)據(jù)
    • VS寫出能運行XP的exe
      • 第一步(換平臺工作集)
      • 第二步(關(guān)閉ASLR)
      • 第三步(關(guān)閉語言符合模式)
    • 運行觀察:
    • CS變化
      • CE查看GDT表

windbg寫入中斷表數(shù)據(jù)

eq 8003f500 0040ee00`00081040

VS寫出能運行XP的exe

第一步(換平臺工作集)

第二步(關(guān)閉ASLR)

第三步(關(guān)閉語言符合模式)

#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

上面是三環(huán)棧,下面是零環(huán)棧,一起來觀察一下:

改變:cs ,ss,esp,

根據(jù)邏輯用途分類:

  • 內(nèi)存區(qū)域類:基址,界限,用途,代碼段,數(shù)據(jù)段,TSS段,LDT段
  • 門類:權(quán)限變化,跳轉(zhuǎn)目標(中斷門,陷阱門,調(diào)用門,任務(wù)門)
  • CS變化

    原來是1B,后面變成8

    8003f000 00000000`00000000 00cf9b00`0000ffff 8003f010 00cf9300`0000ffff 00cffb00`0000ffff

    這個00000000 00000000 段選擇子是0(如果在三環(huán)就+3,零環(huán)就+0),00cf9b00 0000ffff段選擇子是8(如果在三環(huán)就+3,零環(huán)就+0),這個00cf9300 0000ffff段選擇子是0x10(如果在三環(huán)就+3,零環(huán)就+0),這個是00cffb00 0000ffff段選擇子是0x18(如果在三環(huán)就+3,零環(huán)就+0)依次往下推

    1B段選擇子是1B-3=18,也就是這里00cffb00 0000ffff

    8段選擇子是8-0=8,也就是00000000 00000000
    平砍段,windows的段保護機制主要是用來進行權(quán)限提升用的,并沒有用來數(shù)據(jù)存儲從而進行實質(zhì)性的使用;數(shù)據(jù)代碼存儲機制主要是用于頁保護機制,并非段保護

    內(nèi)核保護—>GDT

    CE查看GDT表



    這里的話已經(jīng)把三環(huán)和0環(huán)全部減掉來算

    總結(jié)

    以上是生活随笔為你收集整理的windows内核试验05_中断现场的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。