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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

windbg模拟器不准确现象

發布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模拟器不准确现象的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。