內容簡介
《x86/x64體係探索及編程》是對Intel手冊所述處理器架構的探索和論證。全書共五大部分,從多個方麵對處理器架構相關的知識進行瞭梳理介紹。書中每個章節都有相應的測試實驗,所運行的實驗例子都可以在真實的機器上執行。
通過閱讀《x86/x64體係探索及編程》,讀者應能培養自己動手實驗的能力。如果再有一些OS方麵的相關知識,基本上就可以寫齣自己簡易的OS核心。
作者簡介
鄧誌,1977年生於廣東,在銀行工作十餘年,現自由職業者。對計算機有一股熱情和蠻勁,善於思考,特彆喜歡琢磨底層架構。熟悉C語言,並且精通x86/x64平颱的匯編語言與機器指令係統,能用匯編寫簡易的OS核心。
精彩書評
★在學習x86匯編語言的過程中,總會遇到這樣一種情況:基礎的指令和架構已經學完,驅動或者應用也會開發瞭,但想要再進一步發掘處理器的新增指令集以及新特徵,卻發現參考資料隻有Intel的指令手冊,每條指令寥寥數語的說明文字對於瞭解復雜的新特徵根本是杯水車薪。現在,本書以詳盡的示例帶領讀者探索這部分內容,全麵深入地為讀者展現瞭x86處理器的高級特徵。
——羅雲彬 暢銷書《琢石成器——Windows環境下32位匯編語言程序設計》作者 ★這本書真正是讓我眼前一亮。到目前為止,這是我見過的對x86處理器介紹得最詳盡又最具實踐指導意義的書。我如果學習的話,一定會選擇這本書。很顯然,在實踐中解決睏難,應用所學知識的樂趣,是任何高大全的課程所無法比擬的。如果耐心地將這本書上的內容讀過,將作者提供的例子一一運行過,我相信對x86處理器的知識,必定會瞭然於胸。
—
—譚文 暢銷書《天書夜讀——從匯編語言到 Windows 內核編程》 《寒江獨釣——Windows 內核安全編程》作者 目錄
第一篇 x86基礎
第1章 數與數據類型
1.1 數
1.1.1 數字
1.1.2 二進製數
1.1.3 二進製數的排列
1.1.4 十六進製數
1.1.5 八進製數與十進製數
1.2 數據類型
1.2.1 integer數
1.2.2 floating-point數 9
1.2.3 real number(實數)與NaN(not a number)
1.2.4 unsupported編碼值
1.2.5 浮點數精度的轉換
1.2.6 浮點數的溢齣
1.2.7 BCD碼
1.2.8 SIMD數據 21
第2章 x86/x64編程基礎
2.1 選擇編譯器
2.2 機器語言
2.3 Hello world
2.3.1 使用寄存器傳遞參數
2.3.2 調用過程
2.3.3 定義變量
2.4 16位編程、32位編程,以及64位編程
2.4.1 通用寄存器
2.4.2 操作數大小
2.4.3 64位模式下的內存地址
2.4.4 內存尋址模式
2.4.5 內存尋址範圍
2.4.6 使用的指令限製
2.5 編程基礎
2.5.1 操作數尋址
2.5.2 傳送數據指令
2.5.3 位操作指令
2.5.4 算術指令
2.5.5 CALL與RET指令
2.5.6 跳轉指令
2.6 編輯與編譯、運行
第3章 編寫本書的實驗例子
3.1 實驗的運行環境
3.2 生成空白的映像文件
3.2.1 使用nasm編譯器生成
3.2.2 使用bximage工具
3.3 設置bochs配置文件
3.4 源代碼的基本結構
3.5 編譯源代碼
3.6 映像文件內的組織
3.7 使用merge工具
3.7.1 merge的配置文件
3.7.2 執行merge命令
3.8 使用U盤啓動真實機器
3.8.1 使用merge工具寫U盤
3.8.2 使用hex編輯軟件寫U盤
3.9 編寫boot代碼
3.9.1 LBA轉換為CHS
3.9.2 測試是否支持int 13h擴展功能
3.9.3 使用int 13h擴展讀磁盤
3.9.4 最後看看load_module()
3.1 總結
第4章 處理器的身份
4.1 測試是否支持CPUID指令 67
4.2 CPUID指令的術語及錶達
4.3 基本信息與擴展信息
4.4 處理器的型號(family,model與stepping)
4.5 最大的物理地址和綫性地址
4.6 處理器擴展狀態信息
4.6.1 探測Processor Extended State子葉 75
4.6.2 Processor Extended State子葉所需內存size
4.6.3 Processor Extended State的保存
4.6.4 Processor Extended State的恢復
4.7 處理器的特性
4.8 處理器的Cache與TLB信息
4.9 MONITOR/MWAIT信息
4.1 處理器的long mode
第5章 瞭解Flags
5.1 Eflags中的狀態標誌位
5.1.1 signed數的運算 86
5.1.2 unsigned數的運算
5.2 IOPL標誌位 90
5.3 TF標誌與RF標誌
5.4 NT標誌 95
5.5 AC標誌 96
5.6 VM標誌
5.7 eflags寄存器的其他事項
第6章 處理器的控製寄存器
6.1 CR8
6.2 CR3
6.3 CR0
6.3.1 保護模式位PE
6.3.2 x87 FPU單元的執行環境
6.3.3 CR0.PG控製位 108
6.3.4 CR0.CD與CR0.NW控製位
6.3.5 CR0.WP控製位 110
6.3.6 CR0.AM控製位
6.4 CR4
6.4.1 CR4.TSD與CR4.PCE控製位
6.4.2 CR4.DE與CR4.MCD控製位
6.4.3 CR4.OSFXSR控製位
6.4.4 CR4.VMXE與CR4.SMXE控製位
6.4.5 CR4.PCIDE與CR4.SMEP控製位
6.4.6 CR4.OSXSAVE控製位
6.4.7 CR4中關於頁的控製位
6.5 EFER擴展功能寄存器
第7章 MSR
7.1 MSR的使用
7.2 MTRR
7.2.1 Fixed-range區域的映射
7.2.2 MTRR的功能寄存器
7.3 MSR中對特殊指令的支持
7.3.1 支持sysenter/sysexit指令的MSR
7.3.2 支持syscall/sysret指令的MSR
7.3.3 支持swapgs指令的MSR 127
7.3.4 支持monitor/mwait指令的MSR
7.4 提供processor feature管理
7.5 其他未列齣來的MSR
7.6 關於MSR一些後續說明
第二篇 處理器的工作模式
第8章 實地址模式
8.1 真實的地址
8.2 real mode的編址
8.3 real mode的狀態
8.4 段基址的計算
8.5 第1條執行的指令
8.6 實模式下的執行環境
8.7 實模式下的IVT
8.8 突破64K段限
8.9 A20地址綫
第9章 SMM係統管理模式探索
9.1 進入SMM
9.2 SMM的運行環境 141
9.2.1 SMRAM區域
9.2.2 SMM執行環境的初始化
9.2.3 SMM下的operand與address
9.2.4 SMM下的CS與EIP
9.2.5 SMM下的SS與ESP
9.3 SMM裏的中斷
9.4 SMI的Back-to-Back響應
9.5 SMM裏開啓保護模式 147
9.6 SMM的版本 148
9.7 I/O指令的重啓及Halt重啓
9.8 SMM的退齣 152
9.9 SMBASE的重定位
9.1 SMI處理程序的初始化
9.11 SMM的安全
9.11.1 芯片組的控製
9.11.2 處理器對SMRAM空間的限製
9.11.3 cache的限製
9.12 測試SMI處理程序
第10章 x86/x64保護模式體係(上)
10.1 x86/x64的權限
10.2 保護模式下的環境
10.2.1 段式管理所使用的資源
10.2.2 paging分頁機製所使用的資源
10.3 物理地址的産生 166
10.4 段式管理機製
10.4.1 段式內存管理
10.4.2 段式的保護措施
10.5 段式管理的數據結構 169
10.5.1 Segment Selector(段選擇子)
10.5.2 Descriptor Table(描述符錶)
10.5.3 Segment Selector Register(段寄存器)
10.5.4 Segment Descriptor(段描述符)
10.5.5 LDT描述符與LDT 258
10.6 開啓保護模式
10.6.1 初始化GDT
10.6.2 初始化IDT
10.6.3 切換到保護模式
第11章 x86/x64保護模式體係(下)
11.1 物理頁麵
11.1.1 處理器的最高物理地址(MAXPHYADDR)
11.1.2 物理頁麵的大小
11.1.3 頁轉換模式(Paging Mode) 268
11.2 paging機製下使用的資源 270
11.2.1 寄存器
11.2.2 CPUID查詢leaf
11.2.3 寄存器的控製位
11.2.4 頁轉換錶資源
11.3 32位paging模式(non-PAE模式)
11.3.1 CR3結構
11.3.2 32位paging模式下的PDE結構
11.3.3 使用32位paging
11.4 PAE paging模式 282
11.4.1 在Intel64下的CR3與PDPTE寄存器
11.4.2 在AMD64下的CR3
11.4.3 PAE paging模式裏的PDPTE結構
11.4.4 PAE paging模式裏的PDE結構
11.4.5 PAE paging模式裏的PTE結構
11.4.6 使用和測試PAE paging模式 288
11.4.7 使用和測試Execution Disable功能
11.5 IA-32e paging模式
11.5.1 IA-32e paging模式下的CR3
11.5.2 IA-32e paging模式下的PML4E結構
11.5.3 IA-32e paging模式下的PDPTE結構
11.5.4 IA-32e paging模式下的PDE結構
11.5.5 IA-32e paging模式下的PTE
精彩書摘
如果想對x86與x64有較全麵的瞭解,那麼從第1章到第21章最好都去閱讀。對於x86與x64編程基礎不是那麼好的讀者,第1章和第2章是必須要去瞭解的。
要想更好地瞭解x86與x64平颱,第1篇、第2篇,以及第4篇是需要好好閱讀的,它們是x86與x64架構體係的基石。
第3篇與第5篇旨在幫助讀者擴展視野,它們是讓x86與x64平颱變得強大的地方。
x86與x64的章節
在每一個章節裏都會有x86與x64體係的相關描述,特彆是在第2篇和第3篇。如非明確注明,x86下大多數的特徵在x64下也是適用的。譬如對MSR(Model-Specific Register)的訪問方式在64位執行環境下與x86體係下是一樣的;再譬如對local APIC的編程方式,在x64下與x86下也是一樣的;又譬如對x87 FPU與SSE指令的執行環境,大多數情況下在x64下與x86下是一樣的。
總之,除瞭第12章明確描述x64內容外,其他章節都會含有x86與x64的描述。
書中的例子與工具
本書共21章,每一章對應一個topicXX目錄,實驗例子源代碼就在這些目錄下以ex開頭的子目錄裏,有上百個實驗例子。
……
前言/序言
x86/x64體係探索及編程 下載 mobi epub pdf txt 電子書 格式