Новости | О программе|
---|---|
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 |