出版時(shí)間:2012-10 出版社:電子工業(yè)出版社 作者:鄧志 頁(yè)數(shù):813 字?jǐn)?shù):1000000
Tag標(biāo)簽:無(wú)
內(nèi)容概要
《x86/x64體系探索及編程》是對(duì)Intel手冊(cè)所述處理器架構(gòu)的探索和論證。全書分五大部分,對(duì)多個(gè)方面對(duì)處理器架構(gòu)相關(guān)的知識(shí)進(jìn)行了梳理介紹。書中每個(gè)章節(jié)都有相應(yīng)的測(cè)試實(shí)驗(yàn),所運(yùn)行的實(shí)驗(yàn)例子都可以在真實(shí)的機(jī)器上執(zhí)行。通過(guò)閱讀本書,讀者應(yīng)能培養(yǎng)自己動(dòng)手實(shí)驗(yàn)的能力。如果再有一些OS方面的相關(guān)知識(shí),基本上就可以寫出自己簡(jiǎn)易的OS核心。
作者簡(jiǎn)介
鄧志,1977年生于廣東,在銀行工作十余年,現(xiàn)自由職業(yè)者。對(duì)計(jì)算機(jī)有一股熱情和蠻勁,善于思考,特別喜歡琢磨底層架構(gòu)。熟悉C語(yǔ)言,并且精通x86/x64平臺(tái)的匯編語(yǔ)言與機(jī)器指令系統(tǒng),能用匯編寫簡(jiǎn)易的OS核心。
書籍目錄
第一篇 x86基礎(chǔ)
第1章 數(shù)與數(shù)據(jù)類型
1.1 數(shù)
1.1.1 數(shù)字
1.1.2 二進(jìn)制數(shù)
1.1.3 二進(jìn)制數(shù)的排列
1.1.4 十六進(jìn)制數(shù)
1.1.5 八進(jìn)制數(shù)與十進(jìn)制數(shù)
1.2 數(shù)據(jù)類型
1.2.1 integer數(shù)
1.2.2 floating-point數(shù) 9
1.2.3 real number(實(shí)數(shù))與NaN(not a number)
1.2.4 unsupported編碼值
1.2.5 浮點(diǎn)數(shù)精度的轉(zhuǎn)換
1.2.6 浮點(diǎn)數(shù)的溢出
1.2.7 BCD碼
1.2.8 SIMD數(shù)據(jù) 21
第2章 x86/x64編程基礎(chǔ)
2.1 選擇編譯器
2.2 機(jī)器語(yǔ)言
2.3 Hello world
2.3.1 使用寄存器傳遞參數(shù)
2.3.2 調(diào)用過(guò)程
2.3.3 定義變量
2.4 16位編程、32位編程,以及64位編程
2.4.1 通用寄存器
2.4.2 操作數(shù)大小
2.4.3 64位模式下的內(nèi)存地址
2.4.4 內(nèi)存尋址模式
2.4.5 內(nèi)存尋址范圍
2.4.6 使用的指令限制
2.5 編程基礎(chǔ)
2.5.1 操作數(shù)尋址
2.5.2 傳送數(shù)據(jù)指令
2.5.3 位操作指令
2.5.4 算術(shù)指令
2.5.5 CALL與RET指令
2.5.6 跳轉(zhuǎn)指令
2.6 編輯與編譯、運(yùn)行
第3章 編寫本書的實(shí)驗(yàn)例子
3.1 實(shí)驗(yàn)的運(yùn)行環(huán)境
3.2 生成空白的映像文件
3.2.1 使用nasm編譯器生成
3.2.2 使用bximage工具
3.3 設(shè)置bochs配置文件
3.4 源代碼的基本結(jié)構(gòu)
3.5 編譯源代碼
3.6 映像文件內(nèi)的組織
3.7 使用merge工具
3.7.1 merge的配置文件
3.7.2 執(zhí)行merge命令
3.8 使用U盤啟動(dòng)真實(shí)機(jī)器
3.8.1 使用merge工具寫U盤
3.8.2 使用hex編輯軟件寫U盤
3.9 編寫boot代碼
3.9.1 LBA轉(zhuǎn)換為CHS
3.9.2 測(cè)試是否支持int 13h擴(kuò)展功能
3.9.3 使用int 13h擴(kuò)展讀磁盤
3.9.4 最后看看load_module()
3.1 總結(jié)
第4章 處理器的身份
4.1 測(cè)試是否支持CPUID指令 67
4.2 CPUID指令的術(shù)語(yǔ)及表達(dá)
4.3 基本信息與擴(kuò)展信息
4.4 處理器的型號(hào)(family,model與stepping)
4.5 最大的物理地址和線性地址
4.6 處理器擴(kuò)展?fàn)顟B(tài)信息
4.6.1 探測(cè)Processor Extended State子葉 75
4.6.2 Processor Extended State子葉所需內(nèi)存size
4.6.3 Processor Extended State的保存
4.6.4 Processor Extended State的恢復(fù)
4.7 處理器的特性
4.8 處理器的Cache與TLB信息
4.9 MONITOR/MWAIT信息
4.1 處理器的long mode
第5章 了解Flags
5.1 Eflags中的狀態(tài)標(biāo)志位
5.1.1 signed數(shù)的運(yùn)算 86
5.1.2 unsigned數(shù)的運(yùn)算
5.2 IOPL標(biāo)志位 90
5.3 TF標(biāo)志與RF標(biāo)志
5.4 NT標(biāo)志 95
5.5 AC標(biāo)志 96
5.6 VM標(biāo)志
5.7 eflags寄存器的其他事項(xiàng)
第6章 處理器的控制寄存器
6.1 CR8
6.2 CR3
6.3 CR0
6.3.1 保護(hù)模式位PE
6.3.2 x87 FPU單元的執(zhí)行環(huán)境
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中關(guān)于頁(yè)的控制位
6.5 EFER擴(kuò)展功能寄存器
第7章 MSR
7.1 MSR的使用
7.2 MTRR
7.2.1 Fixed-range區(qū)域的映射
7.2.2 MTRR的功能寄存器
7.3 MSR中對(duì)特殊指令的支持
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 其他未列出來(lái)的MSR
7.6 關(guān)于MSR一些后續(xù)說(shuō)明
第二篇 處理器的工作模式
第8章 實(shí)地址模式
8.1 真實(shí)的地址
8.2 real mode的編址
8.3 real mode的狀態(tài)
8.4 段基址的計(jì)算
8.5 第1條執(zhí)行的指令
8.6 實(shí)模式下的執(zhí)行環(huán)境
8.7 實(shí)模式下的IVT
8.8 突破64K段限
8.9 A20地址線
第9章 SMM系統(tǒng)管理模式探索
9.1 進(jìn)入SMM
9.2 SMM的運(yùn)行環(huán)境 141
9.2.1 SMRAM區(qū)域
9.2.2 SMM執(zhí)行環(huán)境的初始化
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響應(yīng)
9.5 SMM里開啟保護(hù)模式 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 處理器對(duì)SMRAM空間的限制
9.11.3 cache的限制
9.12 測(cè)試SMI處理程序
第10章 x86/x64保護(hù)模式體系(上)
10.1 x86/x64的權(quán)限
10.2 保護(hù)模式下的環(huán)境
10.2.1 段式管理所使用的資源
10.2.2 paging分頁(yè)機(jī)制所使用的資源
10.3 物理地址的產(chǎn)生 166
10.4 段式管理機(jī)制
10.4.1 段式內(nèi)存管理
10.4.2 段式的保護(hù)措施
10.5 段式管理的數(shù)據(jù)結(jié)構(gòu) 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 開啟保護(hù)模式
10.6.1 初始化GDT
10.6.2 初始化IDT
10.6.3 切換到保護(hù)模式
第11章 x86/x64保護(hù)模式體系(下)
11.1 物理頁(yè)面
11.1.1 處理器的最高物理地址(MAXPHYADDR)
11.1.2 物理頁(yè)面的大小
11.1.3 頁(yè)轉(zhuǎn)換模式(Paging Mode) 268
11.2 paging機(jī)制下使用的資源 270
11.2.1 寄存器
11.2.2 CPUID查詢leaf
11.2.3 寄存器的控制位
11.2.4 頁(yè)轉(zhuǎn)換表資源
11.3 32位paging模式(non-PAE模式)
11.3.1 CR3結(jié)構(gòu)
11.3.2 32位paging模式下的PDE結(jié)構(gòu)
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結(jié)構(gòu)
11.4.4 PAE paging模式里的PDE結(jié)構(gòu)
11.4.5 PAE paging模式里的PTE結(jié)構(gòu)
11.4.6 使用和測(cè)試PAE paging模式 288
11.4.7 使用和測(cè)試Execution Disable功能
11.5 IA-32e paging模式
11.5.1 IA-32e paging模式下的CR3
11.5.2 IA-32e paging模式下的PML4E結(jié)構(gòu)
11.5.3 IA-32e paging模式下的PDPTE結(jié)構(gòu)
11.5.4 IA-32e paging模式下的PDE結(jié)構(gòu)
11.5.5 IA-32e paging模式下的PTE
章節(jié)摘錄
版權(quán)頁(yè): 插圖: ③在IA-32e paging模式下,但CR4.PCIDE=0,即未開啟PCID功能時(shí),使用默認(rèn)的PCID值。 默認(rèn)的PCID值為000H,因此在上述情況下,處理器只維護(hù)000H編號(hào)的TLB和paging-structure cache,實(shí)際效果等同于在legacy處理器上未實(shí)現(xiàn)PCID功能。 更新PCID值 當(dāng)執(zhí)行mov CR3,reg64指令對(duì)CR3進(jìn)行刷新時(shí),TLB和paging-structure cache的失效依賴于CR3 (63)位,如下面的代碼所示。 mov rax, PML4T_BASE | 0×1;PCID=01值 mov cr3, rax;更新CR3 這個(gè)代碼是在CR4.PCIDE=1的前提下,使用了PCID值為1去更新CR3,并且CR3(63)=0,表明需要更新TLB及paging-structure cahce,那么這時(shí)候指令對(duì)TLB和paging-structure cache有下面幾方面的情形。 ①使原來(lái)PCID為001H編號(hào)的TLB無(wú)效,即刷新TLB。 ②使原來(lái)PCID為001H編號(hào)的paging-structure cache無(wú)效,即刷新paging-structure cache。 ③對(duì)global page無(wú)影響,不會(huì)刷新global page。 ④對(duì)其他PCID編號(hào)的TLB和paging-structure cache無(wú)影響,不會(huì)刷新其他PCID編號(hào)的TLB和paging-structure cache內(nèi)容。 因此,處理器會(huì)保留其他PCID編號(hào)的virtual address space在TLB及paging-structure cache的內(nèi)容,即virtual address的page及table entry。
媒體關(guān)注與評(píng)論
在學(xué)習(xí)x86匯編語(yǔ)言的過(guò)程中,總會(huì)遇到這樣一種情況:基礎(chǔ)的指令和架構(gòu)已經(jīng)學(xué)完,驅(qū)動(dòng)或者應(yīng)用也會(huì)開發(fā)了,但想要再進(jìn)一步發(fā)掘處理器的新增指令集以及新特征,卻發(fā)現(xiàn)參考資料只有Intel的指令手冊(cè),每條指令寥寥數(shù)語(yǔ)的說(shuō)明文字對(duì)于了解復(fù)雜的新特征根本是杯水車薪?,F(xiàn)在,本書以詳盡的示例帶領(lǐng)讀者探索這部分內(nèi)容,全面深入地為讀者展現(xiàn)了x86處理器的高級(jí)特征。羅云彬暢銷書《琢石成器——Windows環(huán)境下32位匯編語(yǔ)言程序設(shè)計(jì)》作者這本書真正是讓我眼前一亮。到目前為止,這是我見過(guò)的對(duì)x86處理器介紹得最詳盡又最具實(shí)踐指導(dǎo)意義的書。我如果學(xué)習(xí)的話,一定會(huì)選擇這本書。很顯然,在實(shí)踐中解決困難,應(yīng)用所學(xué)知識(shí)的樂(lè)趣,是任何高大全的課程所無(wú)法比擬的。如果耐心地將這本書上的內(nèi)容讀過(guò),將作者提供的例子一一運(yùn)行過(guò),我相信對(duì)x86處理器的知識(shí),必定會(huì)了然于胸。譚文 暢銷書《天書夜讀——從匯編語(yǔ)言到 Windows 內(nèi)核編程》 《寒江獨(dú)釣——Windows 內(nèi)核安全編程》作者
編輯推薦
《x86/x64體系探索及編程》是對(duì)x86處理器介紹得最詳盡又最具實(shí)踐指導(dǎo)意義的一本書。
名人推薦
在學(xué)習(xí)x86匯編語(yǔ)言的過(guò)程中,總會(huì)遇到這樣一種情況:基礎(chǔ)的指令和架構(gòu)已經(jīng)學(xué)完,驅(qū)動(dòng)或者應(yīng)用也會(huì)開發(fā)了,但想要再進(jìn)一步發(fā)掘處理器的新增指令集以及新特征,卻發(fā)現(xiàn)參考資料只有Intel的指令手冊(cè),每條指令寥寥數(shù)語(yǔ)的說(shuō)明文字對(duì)于了解復(fù)雜的新特征根本是杯水車薪?,F(xiàn)在,本書以詳盡的示例帶領(lǐng)讀者探索這部分內(nèi)容,全面深入地為讀者展現(xiàn)了x86處理器的高級(jí)特征。 ——羅云彬,暢銷書《琢石成哭—Windows環(huán)境下32位匯編語(yǔ)言程序設(shè)計(jì)》作者 這本書真正是讓我眼前一亮。到目前為止,這是我見過(guò)的對(duì)x86處理器介紹得最詳盡又最具實(shí)踐指導(dǎo)意義的書。我如果學(xué)習(xí)的話,一定會(huì)選擇這本書。很顯然,在實(shí)踐中解決困難,應(yīng)用所學(xué)知識(shí)的樂(lè)趣,是任何高大全的課程所無(wú)法比擬的。如果耐心地將這本書上的內(nèi)容讀過(guò),將作者提供的例子一一運(yùn)行過(guò),我相信對(duì)x86處理器的知識(shí),必定會(huì)了然于胸。 ——譚文,暢銷書《天書夜讀—從匯編語(yǔ)言到Windows內(nèi)核編程》《寒江獨(dú)釣—Wondows內(nèi)核安全編程》作者
圖書封面
圖書標(biāo)簽Tags
無(wú)
評(píng)論、評(píng)分、閱讀與下載