12
Конвертор байт-кода java в CIL Д. С. Возжаев, 544 группа Научный руководитель: д. т. н. проф. В. О. Сафонов Рецензент: асп. А. Н. Близнюк Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования

Конвертор байт-кода java в CIL

  • Upload
    kolya

  • View
    53

  • Download
    6

Embed Size (px)

DESCRIPTION

Конвертор байт-кода java в CIL. Д. С. Возжаев, 544 группа Научный руководитель: д. т. н. проф. В. О. Сафонов Рецензент: асп. А. Н. Близнюк Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования. Постановка задачи. - PowerPoint PPT Presentation

Citation preview

Page 1: Конвертор байт-кода  java   в  CIL

Конвертор байт-кода java в CIL

Д. С. Возжаев, 544 группаНаучный руководитель: д. т. н. проф. В. О. Сафонов

Рецензент: асп. А. Н. Близнюк

Санкт-Петербургский Государственный УниверситетМатематико-механический факультет

Кафедра системного программирования

Page 2: Конвертор байт-кода  java   в  CIL

Постановка задачи

• Входные данные:– Работающая программа на Java,

скомпилированная Sun javac или Eclipse

• Интерфейс командной строки

• Используется System.Reflection.Emit

• Выходные данные:– CIL-сборка exe или dll аналогичная

входным данным

Page 3: Конвертор байт-кода  java   в  CIL

Обзор существующих решений

• Microsoft J#

• jilc.sourceforge.net

• Remotesoft Java.Net

Page 4: Конвертор байт-кода  java   в  CIL

Реализация

• Конвертирование метаданных

• Анализ потока данных

• Анализ потока управления

• Генерация кода

Page 5: Конвертор байт-кода  java   в  CIL

0: getstatic java/lang/System.out 3: ldc "Protected code" 5: invokevirtual println:(String)V 8: new java/lang/Object11: dup12: invokespecial Object."<init>":()V15: astore_216: jsr 5019: aload_220: areturn21: pop22: getstatic java/lang/System.out25: ldc "Catch block"27: invokevirtual println:(String)V30: new java/lang/Integer33: dup34: iconst_135: invokespecial Integer."<init>":(I)V38: astore_239: jsr 5042: aload_243: areturn44: astore_145: jsr 5048: aload_149: athrow50: astore_051: getstatic java/lang/System.out54: ldc "Finally body"56: invokevirtual println:(String)V59: goto 6362: pop63: ret 0

try

catch Throwable

catch *

try

catch Throwable

try

catch *

Page 6: Конвертор байт-кода  java   в  CIL

try

catch Throwable

catch *

try

catch Throwable

try

catch *

0: getstatic java/lang/System.out 3: ldc "Protected code" 5: invokevirtual println:(String)V 8: new java/lang/Object11: dup12: invokespecial Object."<init>":()V15: astore_216: jsr 50

19: aload_220: areturn

42: aload_243: areturn

21: pop22: getstatic java/lang/System.out25: ldc "Catch block"27: invokevirtual println:(String)V30: new java/lang/Integer33: dup34: iconst_135: invokespecial Integer."<init>":(I)V38: astore_239: jsr 50

44: astore_145: jsr 5048: aload_149: athrow

50: astore_0

51: getstatic java/lang/System.out54: ldc "Finally body"56: invokevirtual println:(String)V

59: goto 63

62: pop

63: ret 0

Page 7: Конвертор байт-кода  java   в  CIL

try

0: getstatic java/lang/System.out 3: ldc "Protected code" 5: invokevirtual println:(String)V 8: new java/lang/Object11: dup12: invokespecial Object."<init>":()V15: astore_216: jsr 50 goto 19

19: aload_220: areturn

21: pop22: getstatic java/lang/System.out25: ldc "Catch block"27: invokevirtual println:(String)V30: new java/lang/Integer33: dup34: iconst_135: invokespecial Integer."<init>":(I)V38: astore_239: jsr 50 goto 42

42: aload_243: areturn

44: astore_145: jsr 5048: aload_149: athrow

catch Throwable

catch Any

try

catch Any

44: astore_145: jsr 5048: aload_149: athrow

50: astore_0 goto 51

51: getstatic java/lang/System.out54: ldc "Finally body"56: invokevirtual println:(String)V goto 59

59: goto 63

62: pop goto 63

63: ret 0

try

catch Throwable

Page 8: Конвертор байт-кода  java   в  CIL

try

0: getstatic java/lang/System.out 3: ldc "Protected code" 5: invokevirtual println:(String)V 8: new java/lang/Object11: dup12: invokespecial Object."<init>":()V15: astore_2 Ldc_I4, 0 StLoc, Sub1_ReturnIndex goto Sub_1

19: aload_220: areturn

21: pop22: getstatic java/lang/System.out25: ldc "Catch block"27: invokevirtual println:(String)V30: new java/lang/Integer33: dup34: iconst_135: invokespecial Integer."<init>":(I)V38: astore_2 Ldc_I4, 1 StLoc, Sub1_ReturnIndex goto Sub_1

42: aload_243: areturn

51: getstatic java/lang/System.out54: ldc "Finally body"56: invokevirtual println:(String)V goto 63

62: pop goto 63

LdLoc, Sub1_ReturnIndexLdc_I4, 0Breq Sub_1_Return0Br Sub_1_Return1

catch Throwable

catch Any

try

catch Any

try

catch Throwable

44: astore_1

Sub_151: getstatic java/lang/System.out54: ldc "Finally body"56: invokevirtual println:(String)V goto 48

62: pop goto 48

48: aload_149: athrow

try

catch Throwable

Sub_1_Return1: goto 42

Sub_1_Return0: goto 19

44: astore_1

51: getstatic java/lang/System.out54: ldc "Finally body"56: invokevirtual println:(String)V goto 48

62: pop goto 48

48: aload_149: athrow

try

catch Throwable

Page 9: Конвертор байт-кода  java   в  CIL

Caffeine Mark

• Решето Эратосфена

• Сортировка и генерация последовательностей

• Сложные условные переходы

• Рекурсивные вызовы методов

• Арифметика с плавающей точкой

Page 10: Конвертор байт-кода  java   в  CIL

• test>jconv.exe […] -name test -src cmkit/embed -main CaffeineMarkEmbeddedApp

• test>test.exe• Sieve score = 35699 (98)• Loop score = 147664 (2017)• Logic score = 112910 (0)• String score = 33793 (708)• Float score = 51015 (185)• Method score = 48378 (166650)• Overall score = 60623

• test>java -cp cmkit/embed CaffeineMarkEmbeddedApp• Sieve score = 16959 (98)• Loop score = 118335 (2017)• Logic score = 65942 (0)• String score = 31140 (708)• Float score = 47125 (185)• Method score = 40733 (166650)• Overall score = 44637

Page 11: Конвертор байт-кода  java   в  CIL

Результаты и перспективы

• Реализовано:– Конвертация метаданных, необходимых

для выполнения программы– Конвертация байт-кода Java в СIL

• Пути развития:– Конвертирование отладочной информации– Улучшение диагностики ошибок– Java Native Interface

Page 12: Конвертор байт-кода  java   в  CIL

Список литературы– Java VM, http://java.sun.com/– CLI, http://msdn2.microsoft.com/en-us/netframework/aa569283.aspx– jbimp, http://msdn2.microsoft.com/en-us/library/y9teabc2(VS.80).aspx– Remotesoft Java.Net, http://www.remotesoft.com/javanet/– jilc, http://jilc.sourceforge.net– IIT-Kanpur, http://www.iitk.ac.in/– Microsoft .Net Framework SDK, http://msdn.microsoft.com/netframework/– Microsoft Visual J++ 6.0, http://msdn2.microsoft.com/en-us/vjsharp/bb188636.aspx– Microsoft Java, http://www.microsoft.com/mscorp/java/– Tim Lindholm, Frank Yellin, “The JavaTM Virtual Machine Specification, Second Edition”, 1999, Prentice Hall PTR, ISBN: 978-

0201432947– Microsoft Phoenix, http://research.microsoft.com/phoenix/– Unmanaged Metadata API, http://msdn2.microsoft.com/en-us/library/ms404384.aspx– James Gosling, Bill Joy, Guy Steele, Gilad Bracha, “The Java(TM) Language Specification”, 2005, Prentice Hall PTR, ISBN:

978-0321246783– Ecma-335, http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-335.pdf– Dominator, http://en.wikipedia.org/wiki/Dominator– T. Lengauer and R. E. Tarjan, “A fast algorithm for finding dominators in a flow graph”, Transactions on Programming

Languages and Systems 1 (1979), 121-141.– Keith D. Cooper, Timothy J. Harvey, and Ken Kennedy, “A Simple, Fast Dominance Algorithm”,

http://www.hipersoft.rice.edu/grads/publications/dom14.pdf– Eclipse, http://www.eclipse.org– Sun Javac, http://java.sun.com/j2se/1.5.0/docs/tooldocs/windows/javac.html– Никлаус Вирт, «Алгоритмы и структуры данных», 1997, Санкт-Петербург: «Невский Диалект»– Caffeine Mark, http://www.benchmarkhq.ru/cm30/– Java Native Interface, http://java.sun.com/j2se/1.4.2/docs/guide/jni/– PE and COFF File Format, http://www.microsoft.com/whdc/system /platform/ firmware/PECOFF.mspx– IEEE 754, http://standards.ieee.org/catalog/bus.html#754-1985