淡江大學覺生紀念圖書館 (TKU Library)
進階搜尋


下載電子全文限經由淡江IP使用) 
系統識別號 U0002-2706200512414300
中文論文名稱 Java逆向編譯器的設計與製作
英文論文名稱 Design and Implementation of a Java Decompiler
校院名稱 淡江大學
系所名稱(中) 資訊管理學系碩士班
系所名稱(英) Department of Information Management
學年度 93
學期 2
出版年 94
研究生中文姓名 胡志慶
研究生英文姓名 Chih-Ching Hu
學號 692520470
學位類別 碩士
語文別 中文
口試日期 2005-05-21
論文頁數 85頁
口試委員 指導教授-廖賀田
委員-莊庭瑞
委員-呂芳懌
委員-魏世杰
中文關鍵字 逆向編譯  反組譯  控制流程分析  堆疊模擬 
英文關鍵字 Decompilation  Disassemble  Control Flow Analysis  Stack Simulation 
學科別分類 學科別社會科學管理學
學科別社會科學資訊科學
中文摘要 逆向編譯(Decompilation)是將低階語言轉換成高階語言。本論文針對Java類別檔進行逆向編譯處理,將控制流程擷取出來,辨認其中的迴域(Loop)與分域(Selection)結構,再以指令重組的技術,重新呈現出高階結構化程式。本論文規劃一個逆向編譯的架構,將整個轉換程序分五個步驟:(1)將Java類別檔經“輸入轉換”轉換成類別結構圖;(2)經“反組譯”轉換成JASM指令;(3) 經“流程圖建構”,轉換成由JASM指令所組成的流程圖;(4)經“控制流轉換”轉換成低階語法圖;(5)經“高階指令重組”轉換成高階語法圖,最後輸出高階的結構化程式。
英文摘要 The decompilation is transforming a low-level language into an equivalent high-level language. This research aims to extracts the control-flow from decompiling the specific Java class file, and then identifies its loops and the selection structure. Finally, we use the instruction reorganization technology to archive the high-level structured program. This thesis plans a framework of decompilation and divides the entire transformation procedure to five steps: (1) translates into the Class Structure from a Java class file via “input translation", (2) translates into the Java Assembly(JASM) instruction via "disassembly", (3) transforms the flow graph which is composed by the Java Assembly(JASM) instruction by processing through "flow graph construction", (4) translates into a low-level syntax diagram via "control-flow translation", and (5) translates through "instruction reorganization" into a high-level syntax diagram and then outputs the high-level structured program.
論文目次 目錄
1. 緒論 1
1.1. 研究背景與動機 1
1.2. 相關研究 4
1.3. 論文組織 6
2. 架構與模型 7
2.1. 系統架構 7
2.2. 類別結構圖 8
2.3. JASM指令 9
2.3.1. 反組譯 9
2.4. 流程圖 10
2.5. 低階語法圖 11
2.6. 高階語法圖 13
3. 二元類別檔解譯與反組譯 15
3.1. Java類別檔解譯 15
3.2. JASM指令與反組譯 18
3.3. 例外處理區塊 20
4. 控制流程的辨認與調整 22
4.1. 流程圖建構 22
4.2. 支配關係與反向邊 24
4.3. 自然迴域 27
4.4. 共頭反向邊 29
4.5. 控制流程轉換程序 31
5. 運算式的辨認與調整 34
5.1. Java堆疊機器 34
5.2. JASM指令與運算式語法樹 38
5.3. 運算式辨認與調整 41
5.4. 運算式轉換程序 65
5.5. 最佳化指令與運算式辨認 66
6. 結論與展望 68
6.1. 結論 68
6.2. 系統限制 69
6.3. 後續研究 69
參考文獻 71
附錄 73
附錄A JASM指令規格書 73
附錄B 運算式表示法的結構摘要 83

圖目錄
圖1.1 1 Java系統架構示意圖 2
圖 1.2 1 JReversePro逆向編譯範例圖 5
圖2.1 1系統架構圖 7
圖2.2 1 類別檔結構圖 8
圖2.3 1 JASM指令建構圖 10
圖2.4 1 流程圖建構圖 10
圖2.4 2 流程節點定義圖 11
圖2.5 1 低階語法圖 12
圖2.5 2 低階語法圖的節點定義圖 13
圖2.6 1 高階語法圖 14
圖2.6 2 高階語法圖的部分節點定義圖 14
圖3.1 1 類別檔案格式 16
圖3.2 1 JASM指令結構定義圖 19
圖3.3 1 例外區塊示意圖 21
圖4.1 1 流程圖節點轉換圖 23
圖4.1 2 流程圖建構轉換圖 24
圖4.2 1 支配關係示意圖 25
圖4.2 2 支配者集合(Dominator Set)示意圖 25
圖4.2 3 結構辨認的各部分說明圖 27
圖4.4 1 共頭反向邊範例圖 29
圖4.4 2 共頭反向邊 30
圖4.5 1 流程圖化簡圖 32
圖5.1 1 堆疊指令示意圖 35
圖5.1 2 JVM執行系統的方法堆疊框架 35
圖5.1 3 區域變數表分配範例圖 36
圖 5.1 4 分支指令的運算元堆疊狀態圖 38
圖 5.2 1 IfStmtUnit敘述結構 39
圖 5.2 2 WhileStmtUnit 敘述結構 39
圖 5.2 3 ExpStmtUnit 敘述結構 40
圖 5.2 4 ReturnStmtUnit 敘述結構 40
圖 5.2 5 ThrowStmtUnit 敘述結構 40
圖 5.3 1 低階語法圖的流程結構圖 42
圖 5.3 2 AddUnit運算式語法樹 44
圖 5.3 3 一元運算式語法樹 45
圖 5.3 4 物件建立運算式語法樹 46
圖 5.3 5 方法呼叫運算式語法樹 47
圖 5.3 6 欄位存取運算式語法樹 48
圖 5.3 7 陣列建立運算式語法樹 49
圖 5.3 8 常數值運算式語法樹 50
圖 5.3 9 轉型運算式語法樹 51
圖 5.3 10 物件型別檢查運算式語法樹 51
圖 5.3 11 陣列存取運算式語法樹 52
圖 5.3 12 指派運算式語法樹 53
圖 5.3 13 區域變數增值運算式敘述 54
圖 5.3 14 返回敘述語法樹 55
圖 5.3 15 丟出例外敘述語法樹 55
圖 5.3 16 運算式敘述語法樹 56
圖 5.3 17 dup指令範例圖 57
圖 5.3 18 dup指令的運算式連結圖 58
圖 5.3 19運算式表示法 59
圖 5.3 20 陣列初始值敘述句改良圖 61
圖 5.3 21 運算元堆疊合併轉換示意圖 63
圖 5.4 1 高階運算式語法圖 65
圖 5.5 1 經最佳化的指令範例圖 67

表目錄
表 3.1 1 CorINode結構定義表 17
表 5.3 1 二元算術邏輯指令轉換表 44
表 5.3 2 一元運算指令轉換表 45
表 5.3 3 物件建立指令轉換表 45
表 5.3 4 方法呼叫指令轉換表 46
表 5.3 5 欄位存取指令轉換表 47
表 5.3 6 陣列建立指令轉換表 48
表 5.3 7 常數值指令轉換表 49
表 5.3 8 轉型指令轉換表 50
表 5.3 9 物件型別檢查指令轉換表 51
表 5.3 10 陣列存取指令轉換表 52
表 5.3 11 指派指令轉換表 53
表 5.3 12 區域變數增值指令轉換表 54
表 5.3 13 返回指令轉換表 54
表 5.3 14 丟出例外指令轉換表 55
表 5.3 15 運算式敘述(ExpStmtUnit)產生表 56
表 5.3 16 運算式單元的優先權表 62
參考文獻 [AU85] A.V. Aho, R. Sethi and J. D. Ullman, Compiler Principles, Techniques, and Tools, Addison-Wesley, 1985.
[AH97] Ken Arnold, James Gosling and David Holmes, The Java Programming Language, Addison-Wesley, July 1997.
[AS01] Susan Anderson-Freed, Ellis Horowitz and Sartaj Sahni, Fundamentals of Data Structures in C, Computer Science Press, 2001.
[DW99] Don Lance, Roland H. Untch and Nancy J. Wahl, “Bytecode-based Java Program Analysis”, ACM Press, Apr 1999.
[Jr05] JReversePro, http://jrevpro.sourceforge.net/, Apr 2005.
[Kr96] Douglas Kramer, “The Java Platform: A White Paper”, Sun Press, 1996.
[LY99] Tim Lindhohn and Frank Yellin, Java Virtual Machine Specification, second edition, Addison-Wesley, 1999.
[MD97] Jon Meyer and Troy Downing, Java Virtual Machine, O’REILLY, 1997.
[MH01] Jerome Miecznikowski and Laurie Hendren, “Decompiling Java Using Staged Encapsulation”, Sable Research Group, School of Computer Science, McGill University, Oct 2001.
[MH02] Jerome Miecznikowski and Laurie Hendren, “Decompiling Java Bytecode:Problems, Traps and Pitfalls”, Sable Research Group, School of Computer Science, McGill University, Feb 2002.
[SG99] Sable Research Group, “Soot: a Java Optimization Framework”, Compiler and Concurrency Lab, School of Computer Science, McGill University, Sep 1999.
[Li05] 廖賀田,『直譯技術』,TMIXM1M1450,淡江大學資訊管理系,Feb 2005。
[Lo05] 羅明通律師,『著作違法抄襲之判斷基準-兼談電腦軟體著作權之侵害』,http://www.ascc.net/nl/86/1315/05.txt,Feb 2005。
[Sh94] 徐慶鍾,『逆向編譯器的設計與製作』,淡江大學資訊管理所碩士論文,Jun 1994。
[Ti05] 經濟部智慧財產局,『中華民國九十二年著作權法』,http://www.tipo.gov.tw/copyright/copyright_law/copyright_law_92.asp,Feb 2005。
[Ya05] 楊哲豪,『Java組譯碼規格書』,http://mis.im.tku.edu.tw/~rogery17c/JVM_Instruction_Set.pdf,Apr 2005。
論文使用權限
  • 同意紙本無償授權給館內讀者為學術之目的重製使用,於2006-06-27公開。
  • 同意授權瀏覽/列印電子全文服務,於2006-06-27起公開。


  • 若您有任何疑問,請與我們聯絡!
    圖書館: 請來電 (02)2621-5656 轉 2281 或 來信