Binary Linker компоновщик объектных модулей COFF-i386 в бинарный модуль [Загрузка] О программе
Новости
09 марта 2008 года - Добавлены разделы Новости, Идея. В раздел Загрузка добавлена спецификация на PE и COFF.
Идея

В 2006 году у меня возникло желание создать минимальную операционную среду для работы моих программ без необходимости загрузки операционной системы на платформе PC.

У меня было всё, что мне необходимо: спецификации на оборудование, стандарты на технологии (в том числе очень редкие документы), компиляторы для различных языков программирования и т.д.

Но у меня не было одного - инструмента, с помощью которого возможно собрать весь код в очень простой исполнимый файл.

Тогда у меня возникла другая идея. А почему бы не создать такой инструмент самому.

Я нашёл спецификацию на общепринятый формат объектных файлов Common Object File Format (COFF) и начал писать программу на Си.

Через месяц работа была закончена. Я получил нужный инструмент. А именно компоновщик (linker), с помощью которого я мог собрать весь нужный код (результат работы компилятора (compiler) Microsoft Visual C++ 2005) в бинарный исполнимый файл.

К сожалению, работу над операционной средой я был вынужден прекратить, но компоновщик (linker) остался. И я хочу поделиться им с каждым, кому он нужен.

Описание

Binary Linker - это программа, которая компонует один или более COFF-i386 объектных файлов, созданных компилятором(ами) и собирает их в единый бинарный исполнимый файл.

Вы можете использовать эту программу при разработки ядра операционной системы, драйверов и других низкоуровневых программ, используя такие ассемблеры и компиляторы как: ML (Microsoft Micro Assembler), CL (Microsoft C and C++ Compiler), ICL (Intel C and C++ Compiler), GCC (GNU Compilers Collection) и другие.

Использование

В одном из объектных файлов должна быть функция main.

По умолчанию базовый адрес равен 0.

Для компоновки

blink объектный_файл объектный_файл ... [-b число_базовый_адрес ] -o исполнимый_файл

Для получения справки.

blink --help

Для получения номера версии.

blink --version
Пример

Создайте файл start.c со следующим содержимым:

void main()
{
	char * p;
	p= ( char * )0xB8000;
	*p= 'A';
fl:
	goto fl;
}

Затем откомпилируйте его (например, с помощью CL):

cl /c /O2 start.c

Теперь у Вас есть COFF-i386 модуль start.obj. Скомпонуйте его с помощью blink:

blink start.obj -o start.bin

Теперь у Вас есть бинарный исполнимый модуль start.bin, который содержит 32-битный код. В нулевом кольце при работе в защищённом режиме процессора в режиме плоской памяти (все сегменты - 32-битные, база 0, лимит 4Гб) получившаяся программа поместит символ 'A' в левый верхний угол дисплея VGA в режиме 3 и войдёт в "вечный цикл".

Если дисассемблировать исполнимый файл, то получится следующий код.

C6 05 00 80 0B 00 41		mov     byte ptr ds:0B8000h, 41h
			loc_0:
EB FE				jmp     short loc_0


Есть вопросы - пишите письма.

E-mail: ant-str@yandex.ru

Hosted by uCoz