當前位置:
首頁 >
Win32基础知识5 - Win32汇编语言006
發(fā)布時間:2025/4/16
22
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Win32基础知识5 - Win32汇编语言006
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Win32基礎知識5
?讓編程改變世界
Change the world by program
?
Windows的內存安排
? 這節(jié)課我們需要理解三個概念:每個應用程序都有自己的4 GB的尋址空間,就算這個程序只暫 1KB的內存;
不同應用程序的線性地址空間是隔離的,盡管他們在內存中是搞在一起;
時刻要記住,DLL程序是“小三”,因此它們沒有自己“私有”的空間。
? 本節(jié)課我們將圖文并茂地來進行原理層面的分析! ?虛擬內存安排:
? Windows 系統(tǒng)一般在硬盤上建立大小為物理內存兩倍左右的交換文件用作虛擬內存。 利用 80386處理器的內存分頁機制,交換文件的尋址上可以很方便地作為物理內存使用。 (只需要在真正調用的時候將其讀入物理內存并同時修改線性地址映射到這塊內存即可)。 同樣道理,反正是映射一個地址而已,所以被執(zhí)行的程序也可以不必裝入內存,只需要在頁表中建立映射關系,真正運行到這段代碼才調入內存。 ? 眾所周知,Windows 是一個分時的多任務操作系統(tǒng),CPU時間(就是CPU運行的過程)被分成一個個的時間片后分配給不同程序輪流使用。 在A程序的時間片中,和這個程序執(zhí)行無關的部分(B和C等其他程序的代碼和數(shù)據)并不需要映射到線性地址中。 ? 附加解析: 內存中,所有的程序都搞在一起,關系十分混亂; CPU只能看到線性地址(假的),每個程序擁有自己的線性地址(小三除外)。 ? [caption id="attachment_665" align="aligncenter" width="679"] 虛擬內存安排[/caption] ? ?總結:WIN32編程中幾個很重要的概念
?第一點:
每個應用程序都有自己的4 GB的尋址空間。 該空間可存放操作系統(tǒng)、系統(tǒng)DLL和用戶DLL的代碼,它們之中有各種函數(shù)供應用程序調用。 再除去其他的一些空間,余下的是應用程序的代碼、數(shù)據和可以分配的地址空間。 ?第二點:
不同應用程序的線性地址空間是隔離的。 雖然它們在物理內存中同時存在,但在某個程序所屬的時間片中,其他應用程序的代碼和數(shù)據沒有被映射到可尋址的線性地址中,所以是不可訪問的。 從編程的角度看,程序可以使用4 GB的尋址空間,而且這個空間是“私有”的。 ?第三點:
DLL程序沒有自己“私有”的空間。 它們總是被映射到其他應用程序的地址空間中,當做其他應用程序的一部分運行。 原因很簡單,如果它不和其他程序同屬一個地址空間,應用程序該如何調用它呢? ?從WIN32匯編的角度看內存尋址
? 如果堅持不到這句話出現(xiàn)的同學就因為前邊Windows原理太復雜而放棄的童鞋,小甲魚覺得很可惜…… Win32匯編中的內存訪問遠比DOS下的分段尋址方式簡單,這是為什么呢? 因為Windows是一個多任務的操作系統(tǒng),最首要的宗旨就是“穩(wěn)定壓倒一切”。 ? 如果把描述符表以及頁表等內容交給用戶程序管理是很不安全的。 任何權限上開放引發(fā)的安全問題都是很嚴重的,如Windows 9x中的中斷描述符表是可寫的,CIH病毒可利用它將自己的權限提高到優(yōu)先級0; 而Windows NT下的中斷描述符表是不可寫的,CIH病毒在Windows NT下就無法使用同樣的方法進駐內存。 ? 關于CIH病毒可以到魚C論壇“資源分享”版塊下載^_^ ? 正因為如此,Windows操作系統(tǒng)干脆為用戶程序“安排好了一切”。 具體表現(xiàn)在為用戶程序的代碼段、數(shù)據段和堆棧段全部預定義好了段描述符。這些段的起始地址為0,限長為ffffffff,所以用它們可以直接尋址全部的4 GB地址空間。 ? 程序開始執(zhí)行的時候,CS,DS,ES和SS都已經指向了正確的描述符,在整個程序的生命周期內,程序員不必改動這些段寄存器,也不必關心它們的值究竟是多少(實際上是想改也改不了)。 所以對Win32匯編程序來說,整個源程序中竟然可以不用出現(xiàn)段寄存器的身影。 這在DOS匯編編程中是不可想像的。 ?回顧之前提出的問題:
“為什么在WIN32匯編源代碼中看不到CS,DS,ES,SS等段寄存器的使用?” 答案是:并不是Win32匯編源代碼用不到段寄存器,而是用戶在使用中不必去關心段寄存器! [buy]?獲得所有教學視頻、課件、源代碼等資源打包?[/buy] [Downlink href='http://urlxf.qq.com/?Jfyeqe3']視頻下載[/Downlink]轉載于:https://www.cnblogs.com/LoveFishC/archive/2011/08/11/3847114.html
總結
以上是生活随笔為你收集整理的Win32基础知识5 - Win32汇编语言006的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 23种设计模式的索引
- 下一篇: 从源文件中读出最后10KB内容到目的文件