120 likes | 326 Views
Конвертор байт-кода java в CIL. Д. С. Возжаев, 544 группа Научный руководитель: д. т. н. проф. В. О. Сафонов Рецензент: асп. А. Н. Близнюк Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования. Постановка задачи.
E N D
Конвертор байт-кода java в CIL Д. С. Возжаев, 544 группа Научный руководитель: д. т. н. проф. В. О. Сафонов Рецензент: асп. А. Н. Близнюк Санкт-Петербургский Государственный Университет Математико-механический факультет Кафедра системного программирования
Постановка задачи • Входные данные: • Работающая программа на Java, скомпилированная Sun javac или Eclipse • Интерфейс командной строки • Используется System.Reflection.Emit • Выходные данные: • CIL-сборка exe или dll аналогичная входным данным
Обзор существующих решений • Microsoft J# • jilc.sourceforge.net • Remotesoft Java.Net
Реализация • Конвертирование метаданных • Анализ потока данных • Анализ потока управления • Генерация кода
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