原创 Windows內核安全 ---- 串口過濾(2)

        上篇講到書中實現串口過濾的方式,不過想想這裏面有些不是很靈活的地方,例如這個針對已經有串口的電腦才能使用,如果是USB轉串口類型需要先接入USB之後,啓動該過濾驅動才能實現過濾的作用,而且對串口的編號枚舉是從1~32之間進

原创 使用 Lookaside List 分配內存

本文轉自:http://www.mouseos.com/windows/kernel/lookaside.html 使用 Lookaside List 分配內存 1. 概述 windows 提供了一種基於 lookaside l

原创 win98進入dos

       雖然是一個很老的話題,但是DOS還是沒有真正死亡的情況下還是說一下吧;      98系統可以通過兩種方式進入DOS環境,一是開機按F8,二是啓動98後按開始重啓進入MS-DOS兩種方法,但是這裏一定要說明的是,第二種方法進

原创 TTL電平 RS232電平 CMOS電平

TTL電平:+5V等價於邏輯“1”,0V等價於邏輯“0”             TTL輸出高電平>2.4V,輸出低電平<0.4V。在室溫下,一般輸出高電平是3.5V,輸出低電平是0.2V。最小輸入高電平和低電平:輸入高電平>=2.0V,

原创 根據函數調用過程談棧回溯原理

        通過分析函數調用過程的堆棧變化,可以看出在被調函數的EBP寄存器地址存放的是調用函數的EBP寄存器地址,EBP地址+4存放的是函數調用完成後的下一條指令存放地址,該指令的前一條指令則是調用函數的指令。說起來有點拗口,接下來

原创 函數調用過程堆棧變化分析

       總是被問及函數調用過程中堆棧的變化以及棧回溯的原理,最近好好的研究了一下函數調用過程中各個寄存器和堆棧狀態的變化,在這邊分享一下,如果有不對的地方,希望得到指正,本文使用VS2008工具運行下面這段代碼執行,並將各個過程中堆

原创 ControlSet001、ControlSet002以及CurrentControlSet

 在註冊表HKLM\system注 冊表項中包括用於windows啓動的三個控件組(額外還可能存在一個備份控件組),在初始狀態下,它們分別是ControlSet001、 ControlSet002以及CurrentControlSet。

原创 Windows 自旋鎖分析

1、  自旋鎖(spinlock) 自旋鎖(KSPIN_LOCK)只能用於內核模式的同步機制,定義爲KSPIN_LOCK,自旋鎖可以應用於IRQL>=DISPATCH_LEVEL保護併發操作的共享數據和資源的SMP(對稱多處理器)機器上。

原创 Windows內核安全 ---串口過濾驅動(3) 相關知識總結

  1、  內核中字符串的用法 在Windows內核環境不要使用printf之類的字符串處理函數,一定要是使用內核已經定義了相應API的函數來處理。 // Step1 WCHAR wName[32]; UNICODE_

原创 windows內核安全 --- 串口過濾(1)

        一直從事windows驅動相關的工作,不過沒有怎麼梳理過整體的知識系統,最近又把這本寒江獨釣拿出來看了一遍,將從中得到的相關知識放在這篇文章裏,僅供參考。        串口是啥?串口就是串口唄,嘿嘿。隨着PC機的更新換代

原创 Windows內核安全 —— 第四章 鍵盤的過濾

       本章講了幾種過濾鍵盤的方法,說實話越往後越深,寫的很全,後面我沒看懂,下面是我看懂的部分記錄了下來。        文章開頭講了幾個知識點:        1) 符號鏈接,用一個不同的明智代表一個設備對象,上層可以通過該名稱

原创 Windows內核安全——第五章磁盤的虛擬

本章主要說的是WDK中的ramdisk的工程,該工程實現了一個非分頁內存(nopaged memory)作爲磁盤虛擬空間,虛擬了一個FAT虛擬盤。 該虛擬盤有以下特點:1)性能比一般磁盤高,因爲直接是操作的飛分頁內存,所以讀寫速度比較快;

原创 Windows內核安全——第六章 磁盤過濾

       本章目標:完成一個磁盤卷設備的上層類過濾驅動,該過濾驅動的功能是實現對卷的還原,即開啓該驅動的功能之後,對還原卷的寫操作將只適用於當前,重啓電腦後所寫入的數據都將清零,類似於還原卡之類的功能。 1、磁盤卷設備        

原创 qemu-system-x86_64: drive with bus=0, unit=0 (index=0) exists 錯誤原因

最近在使用qemu的時候有出現drive with bus=0, unit=0 (index=0) exists的錯誤的情況。 網上也給出了很多的解決方法,總結一下: 1)大部分的原因是參數不對,可能少了“-”符號之類的; 2)參數是正確

原创 神奇的編譯器

先看一段代碼: #include <stdio.h> int main(void) { void *p; p = malloc(10); printf(" p = %08X \n",