Android Dalvik虛擬機結構及機制剖析——第2卷( 簡體 字) | |
作者:吳艷霞、張國印 | 類別:1. -> 程式設計 -> 手機程式 -> Android |
出版社:清華大學出版社 | 3dWoo書號: 39294 詢問書籍請說出此書號! 有庫存 NT售價: 145 元 |
出版日:7/11/2014 | |
頁數:163 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787302361084 | 加入購物車 │加到我的最愛 (請先登入會員) |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第1章類加載模塊的原理及實現1
1.1類加載機制概述1 1.2類加載機制整體工作流程介紹2 1.3Dex文件的優化與驗證3 1.3.1Dex文件優化驗證的原理與實現3 1.3.2Odex文件結構分析4 1.3.3函數執行流程6 1.4Dex文件的解析12 1.4.1DexFile數據結構簡析12 1.4.2Dex文件解析流程概述13 1.4.3函數執行流程14 1.5運行時環境數據加載20 1.5.1ClassObject數據結構簡析21 1.5.2類加載整體流程概述23 1.5.3函數執行流程24 1.6類加載機制與解釋器交互示例31 小結33 第2章內存管理的原理及實現34 2.1內存管理初探34 2.2內存分配過程分析36 2.2.1關鍵數據結構36 2.2.2關鍵函數37 2.2.3內存分配流程44 2.3垃圾回收過程分析46 2.3.1垃圾收集算法46 2.3.2關鍵數據結構48 2.3.3關鍵函數49 2.3.4垃圾回收流程53 小結54 第3章JNI模塊的原理及實現55 3.1何時使用JNI55 目錄Android Dalvik虛擬機結構及機制剖析——第2卷Dalvik虛擬機各模塊機制分析3.2JNI編程示例56 3.2.1加載動態鏈接庫56 3.2.2聲明本地函數56 3.2.3實現本地函數56 3.2.4實現JNI_Onload函數59 3.3JNI機制環境的建立60 3.3.1AndroidRuntime類的start方法61 3.3.2JNI_CreateJavaVM()函數63 3.4Java調用C執行流程分析67 3.4.1解釋器棧幀結構體67 3.4.2關鍵函數69 3.4.3Java調用C執行流程76 3.5C調用Java執行流程分析78 3.5.1本地調用接口函數結構體78 3.5.2關鍵函數79 3.5.3C調用Java執行流程85 小結87 第4章反射機制模塊的原理及實現88 4.1概述88 4.2反射機制實現代碼示例89 4.3反射機制API分析92 4.3.1反射機制API分析概述92 4.3.2代理模式API分析94 4.3.3元數據注釋機制API分析94 4.4反射機制的“三層”實現體系95 4.4.1類反射機制在Dalvik虛擬機內部的實現95 4.4.2三層結構實例展示96 4.5反射機制實現分析97 4.5.1Class類詳細分析97 4.5.2Constructor類詳細分析101 4.5.3Method類詳細分析102 4.5.4Field類詳細分析102 4.5.5反射機制對Proxy類和Annotation類功能上的支持104 4.5.6核心函數詳細分析104 4.6模塊內部函數調用關系113 4.6.1反射機制本地方法接口對反射機制實際執行函數的調用113 4.6.2反射機制實際執行函數內部對各個功能點函數的調用113 小結115 第5章解釋器模塊的原理及實現116 5.1概述116 5.2解釋器執行原理116 5.3Portable解釋器實現分析118 5.3.1字節碼解析原理118 5.3.2字節碼指令解釋流程121 5.3.3一個解釋程序的例子123 5.4Fast解釋器C實現分析126 5.4.1字節碼解析原理126 5.4.2字節碼指令解釋流程127 5.5Fast解釋器匯編實現分析129 5.5.1字節碼解析原理129 5.5.2字節碼解析流程131 5.5.3一個解釋程序的例子136 5.6解釋器的模塊化設計137 小結140 第6章即時編譯模塊的原理及實現141 6.1概述141 6.2JIT分類142 6.2.1Methodbased JIT142 6.2.2Tracebased JIT142 6.3整體框架分析143 6.4前端功能及原理分析149 6.4.1構造基本塊150 6.4.2確定控制流關系153 6.4.3識別及篩選循環155 6.4.4SSA形式轉換158 6.5后端功能及原理分析160 6.5.1MIR轉換為LIR161 6.5.2LIR轉換為機器碼163 小結164第1章引言1 1.1軟件保護的背景及意義1 1.2軟件保護場景2 1.3軟件攻擊模型3 1.3.1攻擊者的能力3 1.3.2攻擊者的目標4 1.3.3針對軟件保護的通用攻擊方式4 1.3.4針對軟件水印的特定攻擊方式4 1.4研究現狀5 1.5軟件保護方案6 1.5.1基于審計的保護方案6 1.5.2基于硬件的保護方案6 1.5.3基于軟件的保護方案6 1.6關于軟件保護的專利及法律條文7 1.6.1美國7 1.6.2歐盟8 1.6.3日本8 1.6.4中國8 參考文獻9 參考文獻注釋10 第2章軟件保護基礎11 2.1代碼操縱技術11 2.1.1字節碼查看工具11 2.1.2字節碼操縱工具11 2.1.3字節碼操縱示例14 2.2程序分析技術15 2.3Class文件結構19 2.4拆分與編碼知識23 2.4.1整數拆分23 2.4.2圖編碼23 參考文獻25 參考文獻注釋 25 目錄軟件保護技術第3章軟件水印技術26 3.1國內外研究現狀26 3.2軟件水印的概念、模型及分類26 3.2.1軟件水印概念26 3.2.2軟件水印系統的模型27 3.2.3軟件水印的分類28 3.3評價指標30 3.3.1數據率30 3.3.2隱蔽性30 3.3.3彈性30 3.3.4代價30 3.3.5效率30 3.3.6可信度30 3.4若干關鍵算法31 3.4.1靜態水印算法31 3.4.2動態水印算法42 3.4.3半動態水印算法46 3.5軟件水印系統53 3.5.1現有水印系統53 3.5.2TRUP平臺56 參考文獻59 參考文獻注釋60 第4章軟件混淆技術61 4.1引言61 4.2混淆技術的概念、分類及評估61 4.2.1概念61 4.2.2分類62 4.2.3評估62 4.3混淆算法63 4.3.1設計混淆63 4.3.2數據混淆67 4.3.3控制流混淆68 4.3.4預防混淆69 4.4混淆工具70 4.5混淆算法的檢驗與比較72 4.5.1實驗說明73 4.5.2混淆算法的效果73 4.5.3混淆算法的正確性測試76 4.5.4混淆算法對程序性能的影響76 4.5.5混淆算法對程序優化的抵抗力78 參考文獻79 參考文獻注釋80 第5章軟件防篡改技術81 5.1引言81 5.2軟件防篡改技術的分類方式和設計準則81 5.2.1攻擊類型81 5.2.2分類方式82 5.2.3設計準則83 5.3軟件防篡改技術83 5.3.1校驗和84 5.3.2多塊加密84 5.3.3哨兵85 5.3.4斷言檢查86 5.3.5隱式哈希87 5.3.6TesterCorrector87 5.3.7控制流圖檢測87 5.3.8基于分支函數的檢測88 5.3.9聯機檢測88 5.3.10指針置空響應法89 5.3.11加密90 5.3.12硬件方式91 5.4軟件防篡改技術輔助方案92 5.4.1TPM92 5.4.2SWATT92 5.4.3混淆93 5.4.4程序定制93 5.5軟件防篡改的研究前景93 5.5.1軟件防篡改技術的度量機制93 5.5.2將檢測和響應結合93 5.5.3將防篡改技術與軟件水印技術相結合94 參考文獻94 參考文獻注釋97 第6章軟件保護綜合技術98 6.1水印與混淆技術的結合98 6.1.1semidanamic水印算法與混淆算法結合98 6.1.2.NET平臺的軟件保護98 6.2水印與防篡改技術的結合99 6.3水印感知的Java軟件可信運行環境100 6.3.1Java虛擬機現有安全策略100 6.3.2基于脆弱水印的可信運行環境103 參考文獻105 參考文獻注釋105 第7章總結和展望106 7.1本書內容總結106 7.2展望107 附錄A按操作碼字節值排列的操作碼助記符108 A.1標準操作碼108 A.2快速操作碼110 A.3保留操作碼111 附錄B習題及解答112 本系列叢書共分2卷,本書為第2卷,在第1卷的基礎上,采有情景分析的方式對Android Dalvik虛擬機的源代碼進行了有針對性的分析,圍繞類加載、解釋器、即時編譯、本地方法調用、內存管理及反射機制等功能模塊展開分析,主要幫助讀者從微觀上更深入地理解Dalvik虛擬機中各功能模塊的實現原理及運行機制。
第2卷共6章,第1章介紹類加載機制,包括其整體的工作流程和機制,詳細講解了其中的三個階段,并以一個實例驗證了源碼分析的結果;第2章介紹了Dalvik虛擬機中至關重要的內存管理機制,詳細講解了其實現的兩種算法;第3章分析了JNI模塊的實現原理,在分析源碼的基礎上,細致入微地介紹了為何用JNI編程會提升程序的執行效率;第4章以反射機制的一個代碼示例開始,介紹了其涉及的API,并從宏觀到微觀詳細介紹了反射機制;第5章介紹了實現解釋器的兩種不同的技術,比較了Fast解釋器和Portable解釋器的不同及各自的優劣勢,第6章從介紹最近在解釋器中非常火的JIT(即時編譯)開始,到JIT的所謂的前端分析,再到JIT的后端代碼生成,為本書畫上一個圓滿的句號。 通過閱讀本書,讀者可以了解Dalvik虛擬機在Android應用程序運行過程中所扮演的重要角色及其不可替代的價值。通過閱讀本系列叢書,讀者可以對Android應用程序的執行過程有更加細致的了解,可以幫助讀者優化自己編寫的應用程序,更加合理地設計應用程序結構,有效提高應用程序的運行速度。 讀者在看過第1卷之后,應該已經大致了解了Dalvik虛擬機,包括其模塊組成、Dex文件格式以及使用到的工具。本書作為第2卷,在第1卷的基礎上,將要細致地分析Dalvik內部的組成原理,采用情景分析的方式,有針對性地分析Android Dalvik虛擬機的源代碼,圍繞類加載、解釋器、即時編譯、本地方法調用、內存管理及反射機制等功能模塊逐個擊破,幫助各位讀者從微觀上更深入地理解Dalvik虛擬機中各功能模塊的實現原理及運行機制。在其中展示的所有源碼,都來自于Android 4.0.4的源碼,并在此基礎上添加了些許注釋,以便理解源碼。源碼篇幅可能有點長,但大多數都是其中最主要的內容,如果讀者手邊有源碼,可以對照著看,效果更好。
此時,在翻開這第2卷時,您手邊應該已經準備好了一個能正常調試Dalvik的環境。現在,就進入本卷,邊學習邊實踐,揭開Dalvik內部的神秘面紗。 全書共分為6章: 第1章介紹類加載機制,包括其整體的工作流程和機制,詳細講解其中的三個階段,并以一個實例驗證了源碼分析的結果; 第2章介紹Dalvik虛擬機中至關重要的內存管理機制,詳細講解其實現的兩種算法; 第3章分析JNI模塊的實現原理,在分析源碼的基礎上,細致入微地介紹為何用JNI編程會提升程序的執行效率; 第4章以反射機制的一個代碼示例開始,介紹其涉及的API,并從宏觀(實現的三個模塊)到微觀(具體實現細節)詳細介紹了反射機制; 第5章介紹實現解釋器的兩種不同的技術,比較Fast解釋器和Portable解釋器的不同及各自的優勢和劣勢; 第6章從介紹最近在解釋器中非常火的JIT(即時編譯)開始,到JIT的所謂的前端分析,再到JIT的后端代碼生成,為本書畫上一個圓滿的句號。 本書主要由哈爾濱工程大學吳艷霞、張國印負責編寫,參與本書編寫和校核工作的還有汪永峰、王彥璋、謝東良、于成、張婷婷、苗施亮、許圣明、檀凱,這里對他們的辛勤工作表示衷心的感謝。 本書主要是針對高級Android應用開發工程師、Android系統開發工程師、Android移植工程師及對Android Dalvik虛擬機源碼實現感興趣的讀者參考使用。 編者 2014年5月 |