原创 在非開發機器上調試windows驅動和user mode客戶端的的方法

host os: Windows 7 with Visual Studio 2008 and vmware installed target os: windows xp, running on vmware Now we are dev

原创 Windows運用AVL樹對進程地址空間的管理

32位Windows系統中,進程在用戶態可用的地址空間範圍是低2G(x64下是低8192G)。隨着進程不斷的申請和釋放內存,這個2G的地址空間,有的地址範圍是保留狀態(reserved),有的地址範圍是提交狀態(映射到了物理頁面,comm

原创 shared_ptr線程安全性分析

shared_ptr線程安全性分析 正如《STL源碼剖析》所講,“源碼之前,了無祕密”。本文基於shared_ptr的源代碼,提取了shared_ptr的類圖和對象圖,然後分析了shared_ptr如何保證文檔所宣稱的線程安全性。本文的分

原创 C++Test靜態分析時,拋出”解析文件失敗”錯誤的原因及解決方法

C++Test可以執行代碼靜態分析,檢驗代碼是否符合MisraC++等規則。本文討論了C++Test進行靜態分析時候,拋出解析文件失敗錯誤的原因,並提出繞過去的方法。 本文內容基於以下軟件環境Windows 7 / Visual Stud

原创 通過反彙編分析C語言中volatile關鍵字的含義

根據C語言標準,volatile關鍵字的作用是禁止編譯器對相關變量的存取進行優化。本文利用VC 2010和GCC 4.4.7,分析volatile關鍵字對生成的彙編代碼的影響,以驗證volatile的具體含義。 VC 2010 以下是

原创 DEBUG下,VS 2010的vector和相關迭代器的安全檢查和記錄功能

  本文分析DEBUG配置下,VS 2010中std::vector和相關迭代器提供的安全檢查和記錄功能。有的功能非常耗時。幸好在RELEASE配置下,這些功能都被預編譯指令去掉了。當然這也說明,針對VC程序的效率測試必須採用RELEAS

原创 VC中的#和##宏替換指令

宏替換中的#是把宏替換成字符串常量,比如: 例1: #define MARK(name) printf(#name); MARK(abc)被替換爲 printf("abc"); 例2: #define MARK(name) printf(

原创 VS 2010 std::list.sort函數實現的非遞歸merge sort

td::list.sort()採用的是mergesort算法。 merge sort的遞歸實現非常簡單,一般爲 MergeSort(1,n){       MergeSort(1,n/2);       MergeSort(n/2,n)

原创 Windows下QtCreator編譯過程

QtCreator是QT自帶的開發工具,是學習QT非常好的參考資源. 本文提供對編譯QtCreator的簡單描述 (理論上官網發佈的都是可以編譯的,但實際編譯時候會遇到一些問題,本文記錄下解決方法) 編譯環境:Windows 7 X6

原创 Windows下三種喚醒線程的方法

多線程編程經常遇到以下問題:主線程退出前,後臺線程也優雅的退出。如果後臺線程處於阻塞狀態,則需要把阻塞線程喚醒。本文討論Windows下面,三種喚醒阻塞線程的方法。   第一種:利用WaitForMultipleObjects函數讓線程處

原创 VC中捕捉StackOverflow異常

    程序中棧溢出通常會導致進程直接關閉。本文分析Windows中棧增長和溢出過程,並提供一種捕捉棧溢出的方法,作爲調試程序的參考。 棧大小  

原创 VC的Buffer Security Check

        C/C++對內存的訪問非常自由,也會帶來一些問題。比如對一個局部數組變量的越界寫入就可能導致棧數據被意外修改。         爲了防止線程棧被有意無意錯誤改寫,VC編譯器提供了/GS開關,指示編譯器在棧的某些變量的前後留

原创 Flash在瀏覽器中調用Javascript時的安全設定

背景:windows下一個本地exe內嵌IE,IE中運行一個網頁,該網頁中的flash需要調用網頁中的javascript。 問題:flash調用F

原创 設置win7的驅動調試環境

要開發win7的驅動,首先要設置好win7的調試環境,在網上搜了一下,經過實踐和修改,得到了如下方法 1.設置windows 7以debug狀態啓動 執行命令: bcdedit /copy {current} /d DebugEntry

原创 對於用慣了TortoiseSvn的人,TortoiseGit真是用GIT的神器

http://code.google.com/p/tortoisegit/