Page 1 of 1

BigSample

Posted: Sun Sep 03, 2017 7:24 pm
by 0CodErr
В этом примере несколько исходников компилируются каждый с помощью своего инструмента.
Затем полученные объектные файлы все вместе линкуются с помощью 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: Select all

        PrintHelloFrom(UASM)
        PrintHelloFrom(TASM)
        PrintHelloFrom(GoAsm)
        PrintHelloFrom(NASM)
        PrintHelloFrom(FASM)
        PrintHelloFrom(GAS)
        PrintHelloFrom(CMM)
        PrintHelloFrom(BCC)        
        PrintHelloFrom(Delphi)

также необходимо убрать имя соответствующего объектного файла "Hello_..." из параметров линкера

Code: Select all

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: Select all

        mov    eax, [HelloPtr]
        mov    edx, Offset Hello
        mov    [edx], eax
        mov    eax, [Hello]   
ведь можно было просто

Code: Select all

        mov    eax, Offset Hello    
но я намеренно так сделал, чтобы убедиться, что секции,
в которых находятся эти символы, были включены линкером в выходной файл.

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

Скриншоты(для KolibriOS и Windows):
Spoiler:
scr.PNG
scr.PNG (9.99 KiB)
Viewed 5298 times
scr_w.PNG
scr_w.PNG (10.76 KiB)
Viewed 5298 times
BigSample.7z (2.06 KiB)
Downloaded 375 times

Re: BigSample

Posted: Sun Sep 03, 2017 7:47 pm
by Leency
Жесть! Мой поклон, все это реально очень круто!

Re: BigSample

Posted: Sun Sep 03, 2017 10:20 pm
by punk_joker
Насколько я помню, binutils портирован для KolibriOS. А значит ld и objcopy есть для колибри.

Re: BigSample

Posted: Thu Sep 07, 2017 6:33 pm
by 0CodErr
punk_joker, только всё равно из-под Колибри без нормального редактора проблематично вести разработку. Ну если только что-то по мелочи подправить\добавить\отредактировать.
Вроде бы Leency начинал что-то типа TinyEdit делать. Вероятно, дальше концепта дело не пошло?