Board.KolibriOS.org

Official KolibriOS board
It is currently Wed Jul 24, 2019 1:51 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 4 posts ] 
Author Message
 Post subject: BigSample
PostPosted: Sun Sep 03, 2017 7:24 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
В этом примере несколько исходников компилируются каждый с помощью своего инструмента.
Затем полученные объектные файлы все вместе линкуются с помощью 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(..."
Code:
        PrintHelloFrom(UASM)
        PrintHelloFrom(TASM)
        PrintHelloFrom(GoAsm)
        PrintHelloFrom(NASM)
        PrintHelloFrom(FASM)
        PrintHelloFrom(GAS)
        PrintHelloFrom(CMM)
        PrintHelloFrom(BCC)       
        PrintHelloFrom(Delphi)

также необходимо убрать имя соответствующего объектного файла "Hello_..." из параметров линкера
Code:
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)

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

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

Скриншоты(для KolibriOS и Windows):
Spoiler: Show
Attachment:
scr.PNG
scr.PNG [ 9.99 KiB | Viewed 1601 times ]
Attachment:
scr_w.PNG
scr_w.PNG [ 10.76 KiB | Viewed 1601 times ]
Attachment:
BigSample.7z [2.06 KiB]
Downloaded 119 times


Top
   
 Post subject: Re: BigSample
PostPosted: Sun Sep 03, 2017 7:47 pm 
Offline
Designer
User avatar

Joined: Thu Jan 25, 2007 3:33 pm
Posts: 5053
Жесть! Мой поклон, все это реально очень круто!

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


Top
   
 Post subject: Re: BigSample
PostPosted: Sun Sep 03, 2017 10:20 pm 
Offline

Joined: Tue Apr 12, 2011 11:19 pm
Posts: 1150
Насколько я помню, binutils портирован для KolibriOS. А значит ld и objcopy есть для колибри.

_________________
я лишь учусь


Top
   
 Post subject: Re: BigSample
PostPosted: Thu Sep 07, 2017 6:33 pm 
Offline

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 4 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 3 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited