生活随笔
收集整理的這篇文章主要介紹了
windbg模拟器不准确现象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- windbg模擬器現象
- 用代碼查看8003f038處數據:
- 用代碼查看8003f03C處數據:
- windbg顯示數據為:
- 總結:
#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]
;
//WORD g_tr
;
//DWORD g_800042004
;
DWORD g_8003f038
;
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]
, ax// str ax
// mov g_tr
,ax
// mov eax
,ds:[0x80042004]
// mov g_80042004
,eaxmov eax
, ds: [0x8003f03c]mov g_8003f038
,eaxpop 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]
);
//
printf("tr:%p\n", g_tr
);printf("%p\n", g_8003f038
);//
printf("%p\n", g_tmp
);//
printf("%p\n", IdtEntry
);system("pause");
}
相比上一個,就多了一個int 3指令。緊接著放入xp中運行,然后
windbg模擬器現象
用代碼查看8003f038處數據:
數據為F0000FFF
用代碼查看8003f03C處數據:
數據為 7F40F3FD
windbg顯示數據為:
0040f300 00000fff
總結:
windbg數據不一定全部準確,因為調試器會進行內核權限的“插手”,如果需要驗證,還是需要手動輸出查看,就比如int 3指令之后進行掛起時,還會做數據的修改,不要完全信任windbg中數據(顯示的并非實時數據)
棧數據是線程的核心資源,應受到保護,所以特權切換必須伴隨棧切換,切換應由CPU硬件支持
總結
以上是生活随笔為你收集整理的windbg模拟器不准确现象的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。