Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср окт 18, 2017 7:34 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 4 сообщения ] 
Автор Сообщение
 Заголовок сообщения: BigSample
СообщениеДобавлено: Вс сен 03, 2017 7:24 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
В этом примере несколько исходников компилируются каждый с помощью своего инструмента.
Затем полученные объектные файлы все вместе линкуются с помощью LD(GNU Linker) и OBJCOPY в единое приложение KolibriOS.

Сейчас используются следующие инструменты:также нужна библиотека
Некоторые из инструментов производят объектные файлы формата mscoff, а некоторые omf.
Для сборки с помощью LD+OBJCOPY нужны объектные файлы mscoff формата, так как, LD не понимает omf.
Если компилятор\ассемблер не делает mscoff, а делает omf,
то необходимо преобразовать объектные файлы из omf в mscoff, например, с помощью link -edit.
link - это Microsoft (R) Incremental Linker.
Если же у нас не просто omf, а Borland omf, то тогда для преобразования его в Intel omf перед link -edit понадобится ещё утилита omf2d.

Основной файл - test.asm. В нём происходит вызов функций из других файлов.
Функции, которые вызываются, просто возвращают указатель на строку "Hello from ...".
Эта строка затем выводится в консоль.

Если Вы не хотите использовать какой-либо инструмент, то нужно убрать из основного файла test.asm соответствующую строку "PrintHelloFrom(..."
Код:
        PrintHelloFrom(UASM)
        PrintHelloFrom(TASM)
        PrintHelloFrom(GoAsm)
        PrintHelloFrom(NASM)
        PrintHelloFrom(FASM)
        PrintHelloFrom(GAS)
        PrintHelloFrom(CMM)
        PrintHelloFrom(BCC)       
        PrintHelloFrom(Delphi)

также необходимо убрать имя соответствующего объектного файла "Hello_..." из параметров линкера
Код:
ld -T LScript.x       ^
      Test.obj        ^
      Hello_UASM.obj  ^
      Hello_TASM.obj  ^
      Hello_GoAsm.obj ^
      Hello_NASM.obj  ^
      Hello_FASM.obj  ^
      Hello_GAS.obj   ^
      Hello_C--.obj   ^
      Hello_BCC.obj   ^
      Hello_Delphi.obj^
   -o Test.kex        ^
   -L %KolibriOS%     ^
   -l KolibriOS

но в любом случае понадобятся GoAsm, LD(GNU Linker), OBJCOPY.

%KolibriOS% - директория, содержащая KolibriOS.lib(проще, как мне кажется, завести переменную среды с именем KolibriOS)

В исходниках можно увидеть, казалось бы, лишний код:
Код:
        mov    eax, [HelloPtr]
        mov    edx, Offset Hello
        mov    [edx], eax
        mov    eax, [Hello]   
ведь можно было просто
Код:
        mov    eax, Offset Hello    
но я намеренно так сделал, чтобы убедиться, что секции,
в которых находятся эти символы, были включены линкером в выходной файл.

Этот же пример можно собрать также и для Windows.
Основной файл - Test_Windows.asm. В качестве линкера я использовал GoLink(http://www.godevtool.com/).

Скриншоты(для KolibriOS и Windows):
Спойлер: Показать
Вложение:
scr.PNG
scr.PNG [ 9.99 КБ | 260 просмотров ]
Вложение:
scr_w.PNG
scr_w.PNG [ 10.76 КБ | 260 просмотров ]
Вложение:
BigSample.7z [2.06 КБ]
9 скачиваний


Вернуться к началу
 Заголовок сообщения: Re: BigSample
СообщениеДобавлено: Вс сен 03, 2017 7:47 pm 
Не в сети
Designer
Аватара пользователя

Зарегистрирован: Чт янв 25, 2007 3:33 pm
Сообщения: 4219
Жесть! Мой поклон, все это реально очень круто!

_________________
Через тернии к звездам


Вернуться к началу
 Заголовок сообщения: Re: BigSample
СообщениеДобавлено: Вс сен 03, 2017 10:20 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1076
Насколько я помню, binutils портирован для KolibriOS. А значит ld и objcopy есть для колибри.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: BigSample
СообщениеДобавлено: Чт сен 07, 2017 6:33 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1069
punk_joker, только всё равно из-под Колибри без нормального редактора проблематично вести разработку. Ну если только что-то по мелочи подправить\добавить\отредактировать.
Вроде бы Leency начинал что-то типа TinyEdit делать. Вероятно, дальше концепта дело не пошло?


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

Часовой пояс: UTC+03:00


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

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


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

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