Upload
kolya
View
53
Download
6
Embed Size (px)
DESCRIPTION
Конвертор байт-кода java в CIL. Д. С. Возжаев, 544 группа Научный руководитель: д. т. н. проф. В. О. Сафонов Рецензент: асп. А. Н. Близнюк Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования. Постановка задачи. - PowerPoint PPT Presentation
Citation preview
Конвертор байт-кода java в CIL
Д. С. Возжаев, 544 группаНаучный руководитель: д. т. н. проф. В. О. Сафонов
Рецензент: асп. А. Н. Близнюк
Санкт-Петербургский Государственный УниверситетМатематико-механический факультет
Кафедра системного программирования
Постановка задачи
• Входные данные:– Работающая программа на Java,
скомпилированная Sun javac или Eclipse
• Интерфейс командной строки
• Используется System.Reflection.Emit
• Выходные данные:– CIL-сборка exe или dll аналогичная
входным данным
Обзор существующих решений
• Microsoft J#
• jilc.sourceforge.net
• Remotesoft Java.Net
Реализация
• Конвертирование метаданных
• Анализ потока данных
• Анализ потока управления
• Генерация кода
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 *
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
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
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
Caffeine Mark
• Решето Эратосфена
• Сортировка и генерация последовательностей
• Сложные условные переходы
• Рекурсивные вызовы методов
• Арифметика с плавающей точкой
• 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
Результаты и перспективы
• Реализовано:– Конвертация метаданных, необходимых
для выполнения программы– Конвертация байт-кода Java в СIL
• Пути развития:– Конвертирование отладочной информации– Улучшение диагностики ошибок– Java Native Interface
Список литературы– 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