OSDev
http://osdev.su/

транслятор
http://osdev.su/viewtopic.php?f=6&t=513
Страница 2 из 3

Автор:  Yoda [ 29 мар 2012, 23:59 ]
Заголовок сообщения:  Re: транслятор

Исходники NASMа также открыты.
Портировать всяко проще, чем с нуля создавать полноценный ассемблер. На самом деле написание хорошего оптимизирующего ассемблера с развитым макроязыком совсем не простая задача. Ещё добавь отладку. Над NASM-ом трудятся несколько человек не один год и до сих пор периодически всплывают ошибки.

Автор:  Станислав [ 30 мар 2012, 05:06 ]
Заголовок сообщения:  Re: транслятор

Попробую разобраться с фасмом, убрать всё лишнее из исходников и добавить создание своей таблицы.

Автор:  valeri [ 30 мар 2012, 13:41 ]
Заголовок сообщения:  Re: транслятор

Да, помню, именно fasm был первой прогой, которую я портировал на свою ОС. Там функций от API ОС требуется минимум. А вот что касается правки исходников.... Думаю проще будет реализовать в своей ОС один из популярных форматов исполняемых файлов, они все-таки уже проверены временем.

Автор:  Станислав [ 30 мар 2012, 14:37 ]
Заголовок сообщения:  Re: транслятор

valeri писал(а):
Да, помню, именно fasm был первой прогой, которую я портировал на свою ОС. Там функций от API ОС требуется минимум. А вот что касается правки исходников.... Думаю проще будет реализовать в своей ОС один из популярных форматов исполняемых файлов, они все-таки уже проверены временем.

Какие функции от API ОС там требуются подскажите. В исходниках фасма пример для доса, винды, линукса какой лучше взять, они все компилируются.
И как убрать от туда например поддержку форматов.

Автор:  valeri [ 30 мар 2012, 16:44 ]
Заголовок сообщения:  Re: транслятор

Я брал от Windows.
В файле source\<платформа>\system.inc содержатся обертки для всех используемых API функций.
От ОС нужны функции выделения/освобождения памяти, создания/чтения/записи файлов, вывода строк, короче в этом файле все можно найти.
Тебе, наверное, надо будет целиком переписать system.inc, написав обертки для своей системы.
Ну и source\<платформа>\fasm.asm собственно точка входа в ассемблер.
У меня в ОС поддерживался формат PE, поэтому exe-шник фасма я вообще не трогал, просто написал простейшую реализацию требуемых Windows API функций.

Автор:  Станислав [ 30 мар 2012, 16:54 ]
Заголовок сообщения:  Re: транслятор

да уже заметил этот файл, мне придётся помучиться с форматами. Сначала хочу сделать создание таблицы адресов и компилировать в винде, потом попробую портировать сам фасм к себе.
Думаю о том, чтобы покапаться в коде где создаётся формат(например ELF) и там его подправить.

Автор:  valeri [ 30 мар 2012, 16:57 ]
Заголовок сообщения:  Re: транслятор

Вот видишь уже сколько проблем со своим форматом исполняемых файлов. Почему не использовать существующие?

Автор:  Станислав [ 30 мар 2012, 17:02 ]
Заголовок сообщения:  Re: транслятор

valeri писал(а):
Вот видишь уже сколько проблем со своим форматом исполняемых файлов. Почему не использовать существующие?

В идеале хочю голый бинарник и таблицу адресов перед ним. С существующими форматами я не очень знаком и сейчас читаю про них, чтобы понять где в них эта таблица и какого она формата для того чтобы этот формат подправить нужно знать что править.
Если вы знаете где в этих форматах она подскажите.

Автор:  pavia [ 30 мар 2012, 18:17 ]
Заголовок сообщения:  Re: транслятор

Транслятор написать не трудно. Даже оптимизирующий и с развитыми макросами.
Единственная трудность это то что то x86 имеет порядка 1000 инструкций и вам придется составить таблицу для трансляции. А эта задача трудоёмкая часов на 40.

По поводу форматов PE. Его описание есть на wasm.ru.
А вот Elf я плохо знаю. Не удивлюсь если запись такой таблицы имеет несколько вариантов исполнения.

Автор:  Станислав [ 30 мар 2012, 18:45 ]
Заголовок сообщения:  Re: транслятор

Я читал про PE и раньше и на wasm.ru там не то что нужно, я не находил инфу именно про таблицу адресов, про всё остальное там буков много.
Транслятор попробую взять у фасма, кстати код исходников там не такой и большой по объёму, он по скорости хорош и по функционалу вне конкуренции.

В файле FORMATS.INC увидел как создаются таблицы relocation для форматов elf pe coff, мне приглянулся формат coff, там таблица в конце, я заменил eax на 'ghgh' и наблюдал как фасм вывел мне этот набор символов в дампе в конце файла их было 4 и каждая записи о адресе как я понял 10 байт.

Страница 2 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/