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 писал(а):
Если написали ассемблер - то компоновщик, по идее вообще не вопрос.

Ахах, я и компилятор Сишки писал :lol: Простой, очень, как 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/