OSDev http://osdev.su/ |
|
Помогите навелосипедить компоновщик http://osdev.su/viewtopic.php?f=6&t=956 |
Страница 1 из 1 |
Автор: | Bizun [ 04 июл 2014, 11:36 ] |
Заголовок сообщения: | Помогите навелосипедить компоновщик |
В общем, есть ассемблер, к нему я хочу добавить компоновщик, чтобы можно было нормально писать более-менее большие программы. Собственно, первой проблемой стал сам формат объектного файла. Далеко не конечный вариант можно посмотреть ниже, о нем и будет речь. Код: МЕТКИ число меток ( имя (zero-terminated), позиция объявления в файле, число использований метки ( позиция использования, размер значения (8/16 бит) ) ) КОД Код, че тут добавить. Там, где юзаются метки, просто забиты нули ДАННЫЕ Данные, ни чего интересного Пример: МЕТКИ 2 // Число меток LABEL 0 // Имя метки 1 123 // Позиция объявления 3 // Кол-во использований это метки 10, 8 // Пары позиция использования, размер 15, 16 56, 8 LAB2 // Имя метки 2 56 // Позиция объявления 2 // Кол-во использований это метки 34, 8 // Пары позиция использования, размер 87, 8 КОД ... ДАННЫЕ ... Заметьте, ниже речь только о сегменте кода, т.к. сегмент данных будет обрабатывать отдельно, но по той же схеме. Как я представляю работу этого чуда: 1) Компоновщик открывает очередной файл. Делает поправку адресов (это если были открыты какие то файлы ранее) 2) Собственно, пишет в результирующий файл уже поправленные адреса 3) Открывает следующий Теперь подробнее про поправку адресов. По скольку, мы сшиваем несколько разных файлов в один, нам нужно поправить адреса. Для этого нужно просто к обрабатываему файлу добавить размеры предыдущих файлов, а точнее, только размеры секций кода, ведь сейчас мы работаем именно с ними. Добавлять мы будем в таблицу "МЕТКИ" к адресам объявления меток и позициям их использования. С Сегментом данных такая же история. Собственно, я все правильно делаю? П.С. поясню, для тех, кому интересно. Пишем не большой командой проект, который включает в себя ВМ и оборудование, ассемблер, компоновщик, компилятор и ОС. Так уж получилось, что компоновщик, зараза, оказался самой магической частью из этого всего. |
Автор: | pavia [ 04 июл 2014, 17:11 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
Вроде всё верно. Не рекомендую делать 0 терминальные строки. Это затрудняет обработку требуя двух проходности и тем самым замедляя разбор. Лучше совмещенный метод указания длины затем строка терминированная нулём. Популярным форматом для хранения строк является UTF-8 так что советую уточнить один ноль, два или четыре. И указать тип строки и для одно байтовой кодовую страницу. Компоновщик вещь легкая. Известен входной формат известен выходной. А промежуточный можете делать каким хотите. Это не такая задача над которой надо задумываться. Надо 2 прохода делаете два надо три делаете 3 прохода. |
Автор: | Bizun [ 04 июл 2014, 17:31 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
Цитата: Вроде всё верно. Благодарю за ответ. Пишу по чуть-чуть =) |
Автор: | iz56 [ 04 июл 2014, 18:39 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
Если написали ассемблер - то компоновщик, по идее вообще не вопрос. |
Автор: | Bizun [ 04 июл 2014, 18:42 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
iz56 писал(а): Если написали ассемблер - то компоновщик, по идее вообще не вопрос. Ахах, я и компилятор Сишки писал Простой, очень, как SmallC, но все же. Просто я ни когда с компоновщиком не сталкивался раньше, знал что он есть, и все. |
Автор: | SII [ 04 июл 2014, 19:09 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
iz56 писал(а): Если написали ассемблер - то компоновщик, по идее вообще не вопрос. Простой -- да, а вот продвинутый может быть весьма и весьма сложным. Ещё сильно зависит от архитектуры процессора. Под IA-32, например, он куда проще, чем под ARM. |
Автор: | phantom-84 [ 04 июл 2014, 19:21 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
А чем существующие форматы не устраивают, к примеру Object ELF? |
Автор: | Bizun [ 07 июл 2014, 17:41 ] |
Заголовок сообщения: | Re: Помогите навелосипедить компоновщик |
phantom-84 писал(а): А чем существующие форматы не устраивают, к примеру Object ELF? Да я даже не слышал о нем, по этому и спросил вот. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |