Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Конвертор байт-кода java в CIL Д. С. Возжаев, 544 группа Научный руководитель: д. т. н. проф. В. О. Сафонов Рецензент: асп. А. Н. Близнюк Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования Постановка задачи • Входные данные: – Работающая программа на Java, скомпилированная Sun javac или Eclipse • Интерфейс командной строки • Используется System.Reflection.Emit • Выходные данные: – CIL-сборка exe или dll аналогичная входным данным Обзор существующих решений • Microsoft J# • jilc.sourceforge.net • Remotesoft Java.Net Реализация • • • • Конвертирование метаданных Анализ потока данных Анализ потока управления Генерация кода try catch Throwable catch * try catch * try catch Throwable 0: getstatic java/lang/System.out 3: ldc "Protected code " 5: invokevirtual println :(String)V 8: new java/lang /Object 11: dup 12: invokespecial Object ."<init>":()V 15: astore_2 16: jsr 50 19: aload_2 20: areturn 21: pop 22: getstatic java/lang/System.out 25: ldc "Catch block" 27: invokevirtual println :(String)V 30: new java/lang/Integer 33: dup 34: iconst_1 35: invokespecial Integer ."<init>":(I)V 38: astore_2 39: jsr 50 42: aload_2 43: areturn 44: astore_1 45: jsr 50 48: aload_1 49: athrow 50: astore_0 51: getstatic java/lang/System.out 54: ldc "Finally body " 56: invokevirtual println :(String)V 59: goto 63 62: pop 63: ret 0 try catch Throwable catch * 0: getstatic java/lang/System.out 3: ldc "Protected code " 5: invokevirtual println :(String)V 8: new java/lang /Object 11: dup 12: invokespecial Object ."<init>":()V 15: astore_2 16: jsr 50 19: aload_2 20: areturn try catch Throwable 21: 22: 25: 27: 30: 33: 34: 35: 38: 39: pop getstatic java/lang/System.out ldc "Catch block" invokevirtual println :(String)V new java/lang/Integer dup iconst_1 invokespecial Integer ."<init>":(I)V astore_2 jsr 50 42: 43: 44: 45: 48: 49: 50: 51: 54: 56: 59: 62: 63: aload_2 areturn astore_1 jsr 50 aload_1 athrow astore_0 getstatic java/lang/System.out ldc "Finally body " invokevirtual println :(String)V goto 63 pop ret 0 try catch * 0: getstatic java/lang/System.out 3: ldc "Protected code" 5: invokevirtual println:(String)V 8: new java/lang/Object 11: dup 12: invokespecial Object."<init>":()V 15: astore_2 16: jsr 50 goto 19 try catch Throwable catch Any 19: aload_2 20: areturn try catch Any 44: 45: 48: 49: astore_1 jsr 50 aload_1 athrow 44: 45: 48: 49: astore_1 jsr 50 aload_1 athrow 21: 22: 25: 27: 30: 33: 34: 35: 38: 39: pop getstatic java/lang/System.out ldc "Catch block" invokevirtual println:(String)V new java/lang/Integer dup iconst_1 invokespecial Integer."<init>":(I)V astore_2 jsr 50 goto 42 42: aload_2 43: areturn 50: astore_0 goto 51 try catch Throwable 51: getstatic java/lang/System.out 54: ldc "Finally body" 56: invokevirtual println:(String)V goto 59 59: goto 63 62: pop goto 63 63: ret 0 0: getstatic java/lang/System.out 3: ldc "Protected code" 5: invokevirtual println:(String)V 8: new java/lang/Object 11: dup 12: invokespecial Object."<init>":()V 15: astore_2 Ldc_I4, 0 StLoc, Sub1_ReturnIndex goto Sub_1 try catch Throwable catch Any Sub_1_Return0: goto 19 44: astore_1 19: aload_2 20: areturn try try catch Any catch Throwable 62: pop goto 48 51: getstatic java/lang/System.out 54: ldc "Finally body" 56: invokevirtual println:(String)V goto 48 21: 22: 25: 27: 30: 33: 34: 35: 38: 44: astore_1 48: aload_1 49: athrow Sub_1_Return1: goto 42 try catch Throwable 62: pop goto 48 pop getstatic java/lang/System.out ldc "Catch block" invokevirtual println:(String)V new java/lang/Integer dup iconst_1 invokespecial Integer."<init>":(I)V astore_2 Ldc_I4, 1 StLoc, Sub1_ReturnIndex goto Sub_1 51: getstatic java/lang/System.out 54: ldc "Finally body" 56: invokevirtual println:(String)V goto 48 42: aload_2 43: areturn Sub_1 try 48: aload_1 49: athrow 62: pop goto 63 catch Throwable 51: getstatic java/lang/System.out 54: ldc "Finally body" 56: invokevirtual println:(String)V goto 63 LdLoc, Sub1_ReturnIndex Ldc_I4, 0 Breq Sub_1_Return0 Br Sub_1_Return1 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: 9780201432947 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