OSDev

для всех
Текущее время: 29 апр 2024, 10:44

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Coffe Link
СообщениеДобавлено: 13 май 2011, 16:56 

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
Недавно закончил разработку бинарного линкера Coffe Link.


Начал писать, когда искал полноценный линкер для obj файлов. Нашел любительский binlink.exe русского разработчика Антона Старостина на его сайте. Все было хорошо пока не начались проблемы с линковкой функций, которые идут по 10-15 штук подряд. Он вис, либо не хотел обрабатывать файлы. Вот тогда решил закончить свой проект, и вплотную засел за свою реализацию. В итоге те места, где были проблемы, мой линкер кушал спокойно. Считаю, что я сделал линкер лучше.

Вообщем...
"Coffe Link" 1.0.
Coffe - от аббревиатуры COFF.
  • Работа на ОС Windows.
  • Сборка для 32 разрядной x86-платформы.
  • Входной формат: .obj(COFF i386).
  • Выходной формат: .bin(Flat binary).
  • Задание любого имени выходного файла.
  • Безграничное количество объектных файлов.
  • Совместимость с компилятором Visual C++, GCC, YASM, NASM, FASM, MASM.
  • Указание базы размещения программы (exp. org 0x7C00).
  • Поддержка не инициализированных данных (.bss), кода (.text), констант (.rdata).
  • Порядок размещения секций .text - .rdata - .bss .
  • Точка входа - первая функция первого указанного obj-файла.
  • Сборка модулей написанных на: ASM, С, C++(урезанный)


Последний раз редактировалось JSON 20 май 2011, 19:05, всего редактировалось 3 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 13 май 2011, 17:01 

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
Инструкция пример:
"C:\Program Files\ASM\coffelink" "Inter\kernel.obj" "Inter\descr_table.obj" "Inter\util.obj" "Inter\utils.obj" -b 2097152 -o "Bin\KERNEL.bin" ,
-b база в десятичных числах
-o выходной файл

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

ВНИМАНИЕ! Так как это первая версия, то не рекомендуется в глобальной области создавать переменные и константы. Могут быть ошибки.
Так работает:
Код:
#include "descr_table.h"

SGDescr *g_psGD=0;
unsigned short int g_wGDTPointer=0;
SIDescr *g_psID=0;

void GDTInit()
{
   int i;

   //LGDT(0x100800, 0xFFFF);
   g_psGD=reinterpret_cast<SGDescr*>(0x100800);
.......................................................
........................................................


Впрочем в binlinker'е тажа ситуация.
На своем линкере сам собираю ядро ОС.

deposit


Последний раз редактировалось JSON 15 май 2011, 15:22, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 14 май 2011, 03:02 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
А не смотрели, например, унилинк? ftp://ftp.styx.cabel.net/pub/UniLink/ulnbXXXX.zip , если не ошибаюсь, где ХХХХ -- версия.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 14 май 2011, 11:35 

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
Где же ты раньше был. Я повсюду искал такой линкер.
Наверное я неправильно ищу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 14 май 2011, 17:16 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Потестим. Хотя у меня есть аналогичный компоновщик, но только для object ELF и генерирующий бинарники собственного формата.

Было бы неплохо иметь компоновщик для генерации чистого бинарника, поддерживающий сохранение нескольких секций (с разными базовыми смещениями) разной разрядности, "виртуальные" секции, явное задание начальной и конечной секций (а еще лучше порядка следования секций), приведение размера конечного файла к определенной кратности, приведение содержимого файла к определенной контрольной сумме, генерацию констант с размером конечного файла, внутрифайловыми смещениями, базами и размерами всех секций. Если появится такой инструмент, я смогу собирать ядро из объектников :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 19 май 2011, 17:09 

Зарегистрирован: 19 май 2011, 14:54
Сообщения: 73
Цитата:
Если появится такой инструмент, я смогу собирать ядро из объектников

А из чего же вы собираете ядро сегодня? И второй вопрос. Всвязи с чем требуется разнообразие сегментов в ядре?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 19 май 2011, 20:47 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Цитата:
А из чего же вы собираете ядро сегодня?
Непосредственно из исходников (fasm).

Цитата:
И второй вопрос. Всвязи с чем требуется разнообразие сегментов в ядре?
Ну хотя бы в связи с тем, что одни секции у меня прикреплены к адресам базовой памяти, а другие к виртуальным адресам порядка 0x80000000 (или 0xC0000000). См. "Файл ядра".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 20 май 2011, 18:27 

Зарегистрирован: 04 май 2011, 18:13
Сообщения: 121
Сегодня закончил новую версию.

Вообщем...
"Coffe Link" 1.1 .
  • Добавлен механизм сообщений для различных ситуаций и help message.
  • Добавлена поддержка инициализированных данных (.data).
  • Изменен порядок размещения секций .text - .data - .rdata - .bss .
  • Изменена точка входа - _main в независимости от порядка и расположения.
  • Добавлена поддержка повторений одних и тех же секций.

Теперь функция void main() - может находиться где угодно. Линкер вычисляет и вставляет jmp на эту функцию.
Если "_main" отсутствует выполняется первые байты.

Некоторые ошибки с глобальными переменным и константами устранены.

В будущем при возникновении необходимости планирую делать линкер не хуже gcc и ulink.

http://depositfiles.com/files/12y4dk947


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Coffe Link
СообщениеДобавлено: 25 май 2011, 13:15 
Аватара пользователя

Зарегистрирован: 20 апр 2011, 10:54
Сообщения: 145
Спасибо!
Я сейчас засел за Binlink. (на Coffe перейду, когда возникнут проблемы:-)
Никак не мог найти удобную комбинацию инструментов для моего баловства.
Сейчас нашел, с вашей помощью.
Делюсь: FASM+TinyCC+Binlink+Objconv.

_________________
Found a CPU. LAPIC ID: 00


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB