Windows環境下堆管理系統的快表介紹

來源:互聯網
上載者:User

標籤:release   get   操作   win   構建   空閑   www   pcre   lan   

  • 實驗環境:
    • 作業系統: Windows 2000 Service Pack 4
    • 整合式開發環境: Microsoft Visual C++ 6.0 SP6
    • 構建版本:Release版本
  • 實驗代碼:
  •  1 #include <stdio.h> 2 #include <windows.h> 3  4 void main() 5 { 6     HLOCAL h1, h2, h3, h4; 7     HANDLE hp; 8  9     // 啟用快表10     hp = HeapCreate(0, 0, 0);11     printf("hp: %p\n", hp);12 13     // 避免程式監測出調試器而使用調試堆管理原則14     __asm int 315 16     h1 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 8);17     printf("h1: %p\n", h1);18     h2 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 8);19     printf("h2: %p\n", h2);20     h3 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 16);21     printf("h3: %p\n", h3);22     h4 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 24);23     printf("h4: %p\n", h4);24 25     HeapFree(hp, 0, h1);26     HeapFree(hp, 0, h2);27     HeapFree(hp, 0, h3);28     HeapFree(hp, 0, h4);29 30     h2 = HeapAlloc(hp, HEAP_ZERO_MEMORY, 16);31     printf("h2: %p\n", h2);32 33     HeapFree(hp, 0, h2);34 }

     

  • 啟用快表之後,堆結構也會發生一些變化,比較主要的是初始化堆的最大塊不再位於0x688位移處了,這個位置被快表霸佔了,查看0x178位移處的空表索引區也可以發現。(我的機器上堆的首地址是0x00360000)
  • 此時到0x00360688記憶體區查看,會發現快表地區的資料都是空的。這也是為什麼要先申請堆塊,然後釋放堆塊的原因,從空表中申請堆塊,然後釋放8,16,24個位元組的堆空間,由於是8的整數倍,因此會優先鏈入快表中。
  • 單步到四次釋放操作結束,紅框框出的分別是8,16,24個位元組堆塊的地址。
  • 接下來再到0x00361EA0查看快表堆塊的結構,可以看到,和空表堆塊有兩個明顯的不同,一個是塊首的標誌位始終是0x01,也就是busy,這也是快表堆塊不進行合并的原因;另一個是塊首隻包含指向下一個堆塊的指標,不存在指向前一個堆塊的指標。(具體內容可以參見Windows環境下堆表的空閑雙向鏈表結構)
  • 經過前面的分配釋放操作,快表已經非空了,如果再申請8,16,24位元組的堆塊空間的時候,系統會直接從塊表中進行分配。此後進行h2釋放操作,16位元組的堆塊又會重新鏈入快表中。
  • 資料引用:
    • 王清. 《0day安全:軟體漏洞分析技術(第2版)》. 電子工業出版社. 2011
    • Matt Connover. "Windows Heap Internals". 2004
  • 如有錯誤,歡迎指正,謝謝。

Windows環境下堆管理系統的快表介紹

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.