![]() |
Ответ: создание MIDletPascal compiler'a
спасибо! это уже что-то, хотя решение не простое, и нужно ставить java.
буду смотреть... при беглом просмотре скачанных файлов меня заинтересовали исходники, т.е. *.class-файлы ;) из каталога pascal.zip/pascal/pas3/mhc/compiler/ P.S. можно конечно сделать конвертирощик из pascal-исходника в java-исходник, но идея состоит именно в получении готового *.class-файла без дополнительных утилит и программ |
Re: создание MIDletPascal compiler'a
Тогда вот пример создания PE файла, расписана почти вся структура, короче прилепить суда тока Синт. и Лексич. анализаторы и готов компилер в exe.
http://sharing.ho.com.ua/freeide/test.zip бинарный файл (5.45кб) Ща поднимаю форматы class файлов, но по памяти там вроде все в массивы запихнуто, типа 0х00 Массив структур 0х20 Массив классов ......................... Помню что там чота оч простое. Потом хорошоб достать Java декомпилер (ща пробую исходники достать) А вообще надо с автором MP насчет исходников как то связаца. http://www.uni-vologda.ac.ru/java/jvm/outline.htm На русском и формат CLASS и спецификация... |
Ответ: создание MIDletPascal compiler'a
satan сенкс, активное участие и за последнюю ссылку! правда в доке что я выкладывал написано то же, но на английском...
С PE заголовками думаю не стоит лезть в дебри, компилятор делфы, или другой сам все сделает, мы же не соревнуемся в создании самого маленького компилятора )) |
Re: создание MIDletPascal compiler'a
Ну да... просто я к тому, что в принципе база для создания всего что нужно уже есть, причом CLASS файлы луче создавать именно массивом а не структурами, так как это работает в несколько сот раз быстрее... Гы...
Ну чо, изучаем тогда.... помалень... |
Ответ: создание MIDletPascal compiler'a
Товарищ которому авторы МР отдали исходники как в воду канул. Не появляется на форуме и на личку не отвечает.
|
Ответ: создание MIDletPascal compiler'a
Если товарищ хотел непомню сколько $ за регистрацию,.. то врятли отдаст исходники, даже за зеленые...
|
Ответ: создание MIDletPascal compiler'a
Он их уже отдал. Они там хотели их под GPL выложить и пропали.
|
Re: создание MIDletPascal compiler'a
Пора видать мне на форуме отписать все что я о пиндосах думаю... Но ет лирика
Короче дуем для начала на http://www.febooti.com/products/file...rs/hex-editor/ там много всего вкусного, но нам нужен HEX editor (он прям в свойства прописывается и данные копируюца в текстовом формате) Итак чо я посмотрел и проверил... Значицо для начала компильнул класс типа class HelloWorld{ public static void main(String [] args){ System.out.println("Hello World!"); } } с помощью jikes.exe и получил байткод CA FE BA BE 00 00 00 30 00 1D 01 00 0A 48 65 6C 6C 6F 57 6F 72 6C 64 07 00 01 01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 07 00 03 01 00 04 6D 61 69 6E 01 00 16 28 5B ................................... весь не привожу сами увидите, ну что открываем спецификацию и пробуем разобраться ClassFile { u4 magic; u2 minor_version; u2 major_version; u2 constant_pool_count; ........................... Разбиваем наш БК как я понял u2..u4 это кол-во байт, и согласно этому получаем CA FE BA BE // MAGIC - магическое число u4(4 байта) 00 00 // Minor version - младшая версия Java u2(2 байта) 00 30 // Major version - старшая версия Java u2(2 байта) 00 1D // Constant_pool_count u2(2байта) .................................... Так вот ребята, у кого старшая версия компилера (4.5) проверте мое предположение насчот u1..u2..u4 типов, если я прав, то тогда попробую расписать полностью формат CLASS файла по смещениям, потом попробуем в ручную создать, прям в байт-коде простенькое приложение, и если получица, будем хренарить уже компилер... ЗЫ... Магическое число прикольное - Кафе бабе, прям как у нас Кабак и Бабы :D |
Ответ: создание MIDletPascal compiler'a
эх, прийдется все вручную делать...
вообщем вот выдрал список всех java-команд из моего отправленного файла: byte_code.zip, и список команд, используемых в предложенном компиляторе Паскаля... сразу говорю что не все команды будут использоваться... многие из них это упрощенные константные команды начинать надобы с простенького ассеблера, на мой взгляд лучше сделать два массива (или области памяти), 1-для записи структур заголовка, 2-й - для записи байт-кода... а еще лучше под каждую структуру заголовка отдельный массив... т.к. компилятор однопроходный, а при разборе текста программы будут добавляться новые вызываемые методы, т.е. заголовок будет расти... после компиляции заголовок а затем код сбрасываются в файл _________ add = 0; { opcodes } neg = 1; mul = 2; divd = 3; remd = 4; div2 = 5; rem2 = 6; eqli = 7; neqi = 8; lssi = 9; leqi = 10; gtri = 11; geqi = 12; dupl = 13; swap = 14; andb = 15; orb = 16; load = 17; stor = 18; hlt = 19; { terminate program } stop = 20; { end of code } wri = 21; wrc = 22; wrl = 23; rdi = 24; rdc = 25; rdl = 26; eofi = 27; { check eof } eol = 28; ldc = 29; lda = 30; { load address } ldla = 31; ldl = 32; ldg = 33; stl = 34; stg = 35; move = 36; copy = 37; addc = 38; mulc = 39; jump = 40; jumpz = 41; call = 42; adjs = 43; sets = 44; exit = 45; --------------------- aconst_null = 1; //Загрузка в стек null ( пустой ссылки на объект) iconst_m1 = 2; //Загрузка целочисленной константы -1 iconst_0 = 3; //Загрузка целочисленной константы 0 iconst_1 = 4; //Загрузка целочисленной константы 1 iconst_2 = 5; //Загрузка целочисленной константы 2 iconst_3 = 6; //Загрузка целочисленной константы 3 iconst_4 = 7; //Загрузка целочисленной константы 4 iconst_5 = 8; //Загрузка целочисленной константы 5 lconst_0 = 9; //Загрузка длинной целочисленной константы 0 lconst_1 = 10; //Загрузка длинной целочисленной константы 1 fconst_0 = 11; //Загрузка вещественного числа одинарной точности 0 fconst_1 = 12; //Загрузка вещественного числа одинарной точности 1 fconst_2 = 13; //Загрузка вещественного числа одинарной точности 2 dconst_0 = 14; //Загрузка вещественного числа двойной точности 0 dconst_1 = 15; //Загрузка вещественного числа двойной точности 1 bipush = 16; //1,Загрузка в стек однобайтового целого со знаком sipush = 17; //2,Загрузка в стек двухбайтового целого со знаком ldc1 = 18; //1,Загрузка в стек элемента из константного пула ldc2 = 19; //2,Загрузка в стек элемента из константного пула ldc2w = 20; //2,Загрузка в стек длинного целого или двойного вещественного значения из константного пула iload = 21; //1,Загрузка целого из локальной переменной lload = 22; //1,Загрузка длинного целого из локальной переменной iload_0 = 26; //Загрузка целого из локальной переменной 0 iload_1 = 27; //Загрузка целого из локальной переменной 1 iload_2 = 28; //Загрузка целого из локальной переменной 2 iload_3 = 29; //Загрузка целого из локальной переменной 3 lload_0 = 30; //Загрузка длинного целого из локальной переменной 0 lload_1 = 31; //Загрузка длинного целого из локальной переменной 1 lload_2 = 32; //Загрузка длинного целого из локальной переменной 2 lload_3 = 33; //Загрузка длинного целого из локальной переменной 3 fload = 23; //1,Загрузка вещественного одинарной точности из локальной переменной fload_0 = 34; //Загрузка вещественного одинарной точности из локальной переменной 0 fload_1 = 35; //Загрузка вещественного одинарной точности из локальной переменной 1 fload_2 = 36; //Загрузка вещественного одинарной точности из локальной переменной 2 fload_3 = 37; //Загрузка вещественного одинарной точности из локальной переменной 3 dload = 24; //1,Загрузка вещественного двойной точности из локальной переменной dload_0 = 38; //Загрузка вещественного двойной точности из локальной переменной 0 dload_1 = 39; //Загрузка вещественного двойной точности из локальной переменной 1 dload_2 = 40; //Загрузка вещественного двойной точности из локальной переменной 2 dload_3 = 41; //Загрузка вещественного двойной точности из локальной переменной 3 aload = 25; //1,Загрузка объектной ссылки из локальной переменной aload_0 = 42; //Загрузка объектной ссылки из локальной переменной 0 aload_1 = 43; //Загрузка объектной ссылки из локальной переменной 1 aload_2 = 44; //Загрузка объектной ссылки из локальной переменной 2 aload_3 = 45; //Загрузка объектной ссылки из локальной переменной 3 istore = 54; //1,Сохранение целого значения в локальной переменной istore_0 = 59; //Сохранение целого в локальной переменной 0 istore_1 = 60; //Сохранение целого в локальной переменной 1 istore_2 = 61; //Сохранение целого в локальной переменной 2 istore_3 = 62; //Сохранение целого в локальной переменной 3 lstore = 55; //1,Сохранение длинного целого в локальной переменной lstore_0 = 63; //Сохранение длинного целого в локальной переменной 0 lstore_1 = 64; //Сохранение длинного целого в локальной переменной 1 lstore_2 = 65; //Сохранение длинного целого в локальной переменной 2 lstore_3 = 66; //Сохранение длинного целого в локальной переменной 3 fstore = 56; //1,Сохранение вещественного одинарной точности в локальной переменной fstore_0 = 67; //Сохранение вещественного одинарной точности в локальной переменной 0 fstore_1 = 68; //Сохранение вещественного одинарной точности в локальной переменной 1 fstore_2 = 69; //Сохранение вещественного одинарной точности в локальной переменной 2 fstore_3 = 70; //Сохранение вещественного одинарной точности в локальной переменной 3 dstore = 57; //1,Сохранение двойного вещественного в локальной переменной dstore_0 = 71; //Сохранение двойного вещественного в локальной переменной 0 dstore_1 = 72; //Сохранение двойного вещественного в локальной переменной 1 dstore_2 = 73; //Сохранение двойного вещественного в локальной переменной 2 dstore_3 = 74; //Сохранение двойного вещественного в локальной переменной 3 astore = 58; //1,Сохранение объектной ссылки в локальной переменной astore_0 = 75; //Сохранение объектной ссылки в локальной переменной 0 astore_1 = 76; //Сохранение объектной ссылки в локальной переменной 1 astore_2 = 77; //Сохранение объектной ссылки в локальной переменной 2 astore_3 = 78; //Сохранение объектной ссылки в локальной переменной 3 iinc = 132; //2,Увеличение локальной переменной на константу wide = 196; //1,Расширенный индекс для доступа к локальным переменным для команд загрузки, сохранения и приращения newarray = 188; //atype> T_BOOLEAN=4,T_CHAR=5,T_FLOAT=6,T_DOUBLE=7,T_BYTE=8 ,T_SHORT=9,T_INT=9,T_LONG=11 anewarray = 189; //2,Объявление нового массива из ссылок на объекты multianewarray = 197; //2,Размещение нового многомерного массива arraylength = 190; //Возвращает длину массива iaload = 46; //Загрузка целого из массива laload = 47; //Загрузка длинного целого из массива faload = 48; //Загрузка вещественного из массива daload = 49; //Загрузка двойного вещественного из массива aaload = 50; //Загрузка объектной ссылки из массива baload = 51; //Загрузка байта со знаком из массива caload = 52; //Загрузка символа из массива saload = 53; //Загрузка короткого из массива iastore = 79; //Сохранение в целочисленном массиве lastore = 80; //Сохранение в массиве из длинных целых fastore = 81; //Сохранение в массиве из одинарных вещественных dastore = 82; //Сохранение в массиве из двойных вещественных aastore = 83; //Сохранение в массиве из объектных ссылок bastore = 84; //Сохранение в массиве байтов со знаком castore = 85; //Сохранение в символьном массиве sastore = 86; //Сохранение в массиве из коротких целых nop = 0; //Ничего не делает pop = 87; //Извлечение слова с вершины стека pop2 = 88; //Извлечение двух слов с вершины стека dup = 89; //Дублирование слова на вершине стека dup2 = 92; //Дублирование двух слов на вершине стека dup_x1 = 90; //Дублирование слово на вершине стека и помещение копии в стек на два слова ниже dup2_x1 = 93; //Дублирование двух слов на вершине стека и помещение копий на два слова ниже dup_x2 = 91; //Дублирование вершины стека и помещение копии на три слова ниже dup2_x2 = 94; //Дублирование двух слов на вершине стека и помещение копий на три слова ниже swap = 95; //Обмен двух слов на вершине стека iadd = 96; //Сложение целых ladd = 97; //Сложение длинных целых fadd = 98; //Сложение одинарных вещественных dadd = 99; //Сложение двойных вещественных isub = 100; //Вычитание целых lsub = 101; //Вычитание длинных целых fsub = 102; //Вычитание одинарных вещественных dsub = 103; //Вычитание двойных вещественных imul = 104; //Умножение целых lmul = 105; //Умножение длинных целых fmul = 106; //Умножение одинарных вещественных dmul = 107; //Умножение двойных вещественных idiv = 108; //Деление целых ldiv = 109; //Деление длинных целых fdiv = 110; //Деление одинарных вещественных ddiv = 111; //Деление двойных вещественных irem = 112; //Остаток от деления целых lrem = 113; //Остаток от деления длинных целых frem = 114; //Остаток от деления одинарных вещественных drem = 115; //Остаток от деления двойных вещественных ineg = 116; //Отрицание целого leg = 117; //Отрицание длинного целого fneg = 118; //Отрицание одинарного вещественного dneg = 119; //Отрицание двойного вещественного числа ishl = 120; //Сдвиг целого влево ishr = 122; //Арифметический сдвиг целого вправо iushr = 124; //Логический сдвиг целого вправо lshl = 121; //Сдвиг длинного целого влево lshr = 123; //Арифметический сдвиг длинного целого вправо lushr = 125; //Логический сдвиг длинного целого вправо iand = 126; //Логическое И с операндами целого типа land = 127; //Логическое И с операндами длинного целого типа ior = 128; //Логическое ИЛИ с целочисленными операндами lor = 129; //Логическое ИЛИ с операндами длинного целого типа ixor = 130; //Исключающее ИЛИ с целочисленными операндами lxor = 131; //Исключающее ИЛИ с операндами длинного целого типа i2l = 133; //Преобразование целого в длинное целое i2f = 134; //Целое в вещественное i2d = 135; //Целое в двойное вещественное l2i = 136; //Длинное целое в целое l2f = 137; //Длинное целое в вещественное l2d = 138; //Длинное целое в двойное вещественное f2i = 139; //Вещественное в целое f2l = 140; //Вещественное в длинное целое f2d = 141; //Вещественное в двойное вещественное d2i = 142; //Двойное вещественное в целое d2l = 143; //Двойное вещественное в длинное целое d2f = 144; //Двойное вещественное в вещественное int2byte = 145; //Целое в знаковый байт int2char = 146; //Целое в символ int2short = 147; //Целое в короткое ifeq = 153; //2,Переход, если равно 0 ifnull = 198; //2,Переход, если пустой указатель iflt = 155; //2,Переход, если меньше 0 ifle = 158; //2,Переход, если меньше или равно 0 ifne = 154; //2,Переход, если не равно 0 ifnonnull = 199; //2,Переход, если не пустой указатель ifgt = 157; //2,Переход, если больше 0 ifge = 156; //2,Переход, если больше или равно 0 if_icmpeq = 159; //2,Переход, если целые равны if_icmpne = 160; //2,Переход, если целые не равны if_icmplt = 161; //2,Переход, если целое меньше 0 if_icmpgt = 163; //2,Переход, если целое больше 0 if_icmple = 164; //2,Переход, если целое меньше или равно if_icmpge = 162; //2,Переход, если целое больше или равно lcmp = 148; //Сравнение длинных целых fcmpl = 149; //Сравнение вещественных одинарной точности (-1 при NaN) fcmpg = 150; //Сравнение вещественных одинарной точности (1 при NaN) dcmpl = 151; //Сравнение вещественных двойной точности(-1 при NaN) dcmpg = 152; //Сравнение вещественных двойной точности(1 при NaN) if_acmpeq = 165; //2,Переход, если ссылки на объект равны if_acmpne = 166; //2,Переход, если ссылки на объект не равны goto = 167; //2,Переход на goto_w = 200; //4,Переход на (расширенный индекс) jsr = 168; //2,Переход на подпрограмму jsr_w = 201; //4,Переход на подпрограмму (расширенный индекс) ret = 169; //1,Возврат из подпрограммы ret_w = 209; //2,Возврат из подпрограммы (расширенный индекс) ireturn = 172; //Возврат целого значения функции lreturn = 173; //Возврат длинного целого значения функции freturn = 174; //Возврат одинарного вещественного значения функции dreturn = 175; //Возврат двойного вещественного значения функции areturn = 176; //Возврат объектной ссылки из функции return = 177; //Возврат(опустошающий) из процедуры breakpoint = 202; //Остановка и передача контроля обработчику прерываний tableswitch = 170; //Доступ к таблице перехода по индексу и переход lookupswitch = 171; //Доступ к таблице перехода по сравнению с ключом и переход putfield = 181; //2,Установка поля в объекте getfield = 180; //2,Перенос поля из объекта putstatic = 179; //2,Установка статического поля в классе getstatic = 178; //2,Получение статического поля класса invokevirtual = 182; //2,Вызывает метод экземпляра, основываясь на типе времени выполнения invokenonvirtual = 183; //2,Вызывает метод экземпляра, основываясь на не виртуальном типе invokestatic = 184; //2,Вызов метода класса (статического метода) invokeinterface = 185; //4,Вызывает метод интерфейса athrow = 191; //Генерация обработки или ошибки new = 187; //2,Создает новый объект checkcast = 192; //2,Проверяет, что объект имеет данный тип instanceof = 193; //2,Определяет, имеет ли объект данный тип monitorenter = 194; //Вход в контролируемую область кода monitorexit = 195; //Выход из контролируемой области кода |
Re: создание MIDletPascal compiler'a
Ну ты монстрище... Мля, зачот, не знаю прада как тут плюсы ставить, да и хрен с ними... Потом обставимся...
Такис, ча займусь токда переводом примера верхнего на нормальный язык. А насчот массивов - то да, структуры можн писать write() но медленно работает, токда как BlockWrite() и массивы помойму в 10 000 раз быстрее, тем боле что сам dcc32.exe на С++ написан, а все что написано на Си по определению луче на массивы перевести. Здорово оно с ними работает. Кста можно извратица в Delphi и сделать чота типа типизированых массивов, шоб голову не ломать с типами данных, определить тип вроде _head,_cpool... а потом просто обращатся к ним напрямую, Header[_head][$0] = $CA извратица б ишо как нить так Header[_head][0..3] := ([$0,$1,$2,$3]); Ну да ето просто вопрос техники... |
Re: создание MIDletPascal compiler'a
Вкуриваем устройство JAVA компилятора!
Итак возьмем наш стандартный файл HelloWord.java и скомпилим его для разбора на косточки. class HelloWorld{ public static void main(String [] args){ System.out.println("Hello World!"); } } Вот что получается при просмотре в каком нибудь HEXeditor: CA FE BA BE ------------------------------------ Кюєѕ 00 00 ------------------------------------------ .. 00 30 ------------------------------------------ .0 00 1D ------------------------------------------ .. 01 00 0A --------------------------------------- ... 48 65 6C 6C 6F 57 6F 72 6C 64 ------------------ HelloWorld 07 00 01 --------------------------------------- ... 01 00 10 --------------------------------------- ... 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 -java/lang/Object 07 00 03 --------------------------------------- ... 01 00 04 --------------------------------------- ... 6D 61 69 6E ------------------------------------ main 01 00 16 --------------------------------------- ... 28 5B 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 ------------------------------ ([Ljava/lang/String.)V 01 00 04 --------------------------------------- ... 43 6F 64 65 ------------------------------------ Code 01 00 0F --------------------------------------- ... 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 --- LineNumberTable 01 00 03 --------------------------------------- ... 6F 75 74 --------------------------------------- out 01 00 15 --------------------------------------- ... 4C 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 ------ Ljava/io/Print 53 74 72 65 61 6D 3B --------------------------- Stream; 0C 00 09 00 0A 01 00 10 ------------------------ ........ 6A 61 76 61 2F 6C 61 6E 67 2F 53 79 73 74 65 6D 20 java/lang/System .................................................. 07 00 0C 09 00 0D 00 0B 01 00 0C 48 65 6C 6C 6F ...........Hello 57 6F 72 6C 64 21 08 00 0F 01 00 07 70 72 69 6E World!......prin 74 6C 6E 01 00 15 28 4C 6A 61 76 61 2F 6C 61 6E tln...(Ljava/lan 67 2F 53 74 72 69 6E 67 3B 29 56 0C 00 11 00 12 g/String)V..... 01 00 13 6A 61 76 61 2F 69 6F 2F 50 72 69 6E 74 ...java/io/Print 53 74 72 65 61 6D 07 00 14 0A 00 15 00 13 01 00 Stream.......... 06 3C 69 6E 69 74 3E 01 00 03 28 29 56 0C 00 17 .<init>...()V... 00 18 0A 00 04 00 19 01 00 0A 53 6F 75 72 63 65 ..........Source 46 69 6C 65 01 00 0F 48 65 6C 6C 6F 57 6F 72 6C File...HelloWorl 64 2E 6A 61 76 61 00 20 d.java. .................................................. 00 02 00 04 00 00 00 00 ........ 00 02 00 09 00 05 00 06 00 01 00 07 00 00 00 25 ...............% 00 02 00 01 00 00 00 09 B2 00 0E 12 10 B6 00 16 ........І....¶.. B1 00 00 00 01 00 08 00 00 00 0A 00 02 00 00 00 ±............... 03 00 08 00 04 00 00 00 17 00 18 00 01 00 07 00 ................ 00 00 21 00 01 00 01 00 00 00 05 2A B7 00 1A B1 ..!........*·..± 00 00 00 01 00 08 00 00 00 0A 00 02 00 00 00 01 ................ 00 04 00 01 00 01 00 1B 00 00 00 02 00 1C .............. Я разделил на секции, что бы было понятнее. Поехали. Сигнатура CLASS файла. CA FE BA BE Кюєѕ Далее идет описание младшей и старшей версии компилятора 00 00 .. // Младшая 0.0 00 30 .0 // Старшая 3.0 Число объектов в описании файла 00 1D .. Тоесть число всех наших записей в пуле HelloWorld java/lang/Object main ([Ljava/lang/String)V Code LineNumberTable Тут равно 29... нужно проверить на меньшее значение!? Самое интересное начинается. Описание или КОНСТАНТНЫЙ ПУЛ По таблице смотрим 1 байт или tag, он равен 01 или в переводе CONSTANT_Utf8, тобиш значит в описании будет срока UTF8, следующие два поля 00 0А говорят нам о количестве элементов пула, то есть по просту размер строки который тут равен 10 или 0А в 16h 01 00 0A ... Потом идет сама строка 48 65 6C 6C 6F 57 6F 72 6C 64 HelloWorld Сдесь я ещё не совсем вкурил но по всему, что это CONSTANT_Class 07 00 01 Далее опять описание CONSTANT_Utf8 строки и размер 01 00 10 ... 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 java/lang/Object И так далее и тому подобное...Тоесть проще не куда, вот поэтому наверно декомпилировать классы очень легко, но тут возникает проблемка, компилятор придется делать в купе с транслятором PASCAL->JAVA, а затем уже компилировать, можно в принципе и сразу, но писать придется на чистом ООП... |
Re: создание MIDletPascal compiler'a
Все братва, разобрался...
Все просто, как и все простое... Гы... Значит давайте пройдем маленький цикл компиляции в ручную, что бы понять смысл байт-кода. class HelloWorld{ public static void main(String [] args){ System.out.println("Hello World!"); } } Вообщем, весь процесс сводится к записи двумерного массива примерно так, читаем сверху в низ class HelloWorld HelloWorld– это строка, значит тип UTF8 Array[1][0..0A]=” HelloWorld” 48 65 6C 6C 6F 57 6F 72 6C 64 Это класс, значит просто указываем на имя класса Array[2][0..03]=” 01”[0001]->HelloWorld07 00 01 Вызываем стандартные библиотеки Java Array[3][0..10]=”java/lang/Object” ....... И т.д, тоесть нам надо описать тип новый массива и писать в него 4 поля которые нам нужны, мы всегда знаем, это индекс массива, его длину, его содержимое и его тип, потом этот массив считываем в файл и добавляем асм код стандартных функций Java... А теперь шо я хотел написать на форуме МП. Код:
Здаров гандоны и пиндосы! |
Ответ: создание MIDletPascal compiler'a
Поддерживаю. С интересом наблюдаю за развитием проекта...
|
Ответ: создание MIDletPascal compiler'a
Это я такой тупой, что ничего не понимаю, или просто из-за того, что только проснулся? О_о
|
Ответ: создание MIDletPascal compiler'a
Вложений: 1
вложенный файл <1.zip> - кусочек из "Canterbury Pascal for J2ME" (компилятора написанного на java).
файл pascal/pas3/mhc/compiler/ClassFile.* дает структуру и некоторые алгоритмы записи. Анализировать классы буду когда полностью спроектирую удобную структуру представления в delphi, т.е. когда корректно будут загружаться хотябы простейшие class-файлы. кто хочет поучавствовать в проекте вот декомпилер calss-файлов: Java Code Viewer 6.0. -keyGen внутри архива (конвертирует из *.class в *.java) ссылка на скачивание http://www.samsfan.ru/soft/?action=get&openwin=1&id=49 ссылка на страничку http://www.samsfan.ru/soft/?action=view&id=49&parent=7 если есть дельные советы прошу выкладывать кусочки кода, или ссылки для скачки исходников java-виртуальных_машин/ассемблеров/дизассемблеров/и т.д. но в пределах разумного, я каждый байт в инете считаю... p.s. Давайте не будем ругаться,... потому что: 1. пользуемся чей-то выложенной в инете информацией 2. какой-бы не был MP, на нем другие работают 3. на данный момент у нас нет хоть какого-либо компилятора |
Часовой пояс GMT +4, время: 03:56. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot