原创 00、Python源碼編譯

一、編譯前準備 1、Python-3.7.4源代碼 2、VS2015及以上版本, 我們這用VS2017 二、資料獲取方式 1、Python-3.7.4獲取 首先、進入官網https://www.python.org/, 將鼠標移動

原创 02 線程的等待與喚醒

1、等待與喚醒機制 在Windows中,一個線程可以通過等待一個或多個可等待對象,從而進入等待狀態,另一些線程可以在某些時刻喚醒等待這些對象的其他線程。 2、可等待對象 在Windbg中查看如下結構 Windbg指令 名稱

原创 05 信號量

1、事件(EVENT) 兩個線程都要修改全局變量,形成一個臨界區,有一個線程進入代碼,另一個線程是不能進入該代碼塊的,這是事件的特點。 2、信號量(SEMAPHORE) 信號量跟事件類似,但是區別在於它允許多個線程同時進入臨界區。

原创 03 WaitForSingleObject函數分析

1、WaitForSingleObject參數說明 kd> dt _DISPATCHER_HEADER ntdll!_DISPATCHER_HEADER +0x000 Type : UChar //類型

原创 04 事件

1、創建事件對象:信號 CreateEvent(NULL, TRUE, FALSE, NULL); kd> dt _DISPATCHER_HEADER ntdll!_DISPATCHER_HEADER +0x000 Type

原创 06 互斥體

1、爲什麼要由互斥體:等待對象被遺棄 互斥體(MUTANT)與事件(EVENT)和信號量(SEMAPHORE)一樣,都可以用來進行線程同步。 但需要明確的是,這幾個對象都是內核對象,這就意味着,通過這幾個對象可以用來進行跨進程間的線程

原创 00 臨界區

1、併發與同步 併發是指多個線程在同時執行: 單核(分時執行,並不是真正的同時執行) 多核(在某一個時刻會有多個線程在同時執行) 同步是保證在併發執行的環境中各個線程可以有序的執行 2、演示代碼 DWORD dwVal = 0; //

原创 01 自旋鎖

1、不同版本的內核文件 單核: ntkrnlpa.exe 2-9-9-12分頁 ntoskrnl.exe 10-10-12分頁 多核: ntkrnlpa.exe 2-9-9-12分頁 ntoskrnl.exe 10-10-12分頁

原创 03 物理內存的管理

1、物理內存 <1>最大物理內存 10-10-12分頁,最多識別物理內存爲4GB(32位操作系統) 2-9-9-12分頁,最多識別物理內存爲64GB(32位操作系統) <2>操作系統限制 爲什麼xp系統中,2-9-9-12分頁,任然無

原创 01 PrivateMemory內存

1、申請內存的兩種方式 <1>通過VirtualAlloc/VirtualAllocEx申請的:PrivateMemory(當前的線性地址獨享物理頁) <2>通過CreateFileMapping映射的:Mapped Memory(線

原创 02 Mapped Memory

1、申請內存的兩種方式 <1>通過VirtualAlloc/VirtualAllocEx申請的:PrivateMemory(當前的線性地址獨享物理頁) <2>通過CreateFileMapping映射的:Mapped Memory(線

原创 00 線性地址的管理

1、進程空間的地址劃分 空指針賦值區 0x00000000-0x0000FFFF 用戶模式區 0x00010000-0x7FFEFFFF 64KB禁入區 0x7FFF0000-0x7FFFFFFF 內核 0x8000

原创 04 無處不在的缺頁異常

1、什麼是缺頁異常 PTE結構 P當前頁面是否有效,當CPU訪問一個地址,PTE的P位爲0,此時會產生缺頁異常。 2、保留與提交的誤區 LPVOID VirtualAlloc{ LPVOID lpAddress, // 要分配的內存

原创 06 編譯器擴展SEH

1、編譯器支持的SEH _try //1.掛入鏈表 { } _execpt(過濾表達式) //2.異常過濾 { //3.異常處理程序 } 2、過濾表達式 表達式返回的值只能有以下三種 <1>EXCEPTION_EXECUTE_HAN

原创 07 編譯器擴展

1、_try _except自動掛入鏈表 手動掛入鏈表: _asm{ mov eax, fs:[0] mov temp, eax lea ecx, myException mov fs : [0], ecx } 我們用上篇的簡單測試代