Board.KolibriOS.org
http://board.kolibrios.org/

BigSample
http://board.kolibrios.org/viewtopic.php?f=2&t=3587
Page 1 of 1

Author:  0CodErr [ Sun Sep 03, 2017 7:24 pm ]
Post subject:  BigSample

В этом примере несколько исходников компилируются каждый с помощью своего инструмента.
Затем полученные объектные файлы все вместе линкуются с помощью 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 1589 times ]
Attachment:
scr_w.PNG
scr_w.PNG [ 10.76 KiB | Viewed 1589 times ]
Attachment:
BigSample.7z [2.06 KiB]
Downloaded 119 times

Author:  Leency [ Sun Sep 03, 2017 7:47 pm ]
Post subject:  Re: BigSample

Жесть! Мой поклон, все это реально очень круто!

Author:  punk_joker [ Sun Sep 03, 2017 10:20 pm ]
Post subject:  Re: BigSample

Насколько я помню, binutils портирован для KolibriOS. А значит ld и objcopy есть для колибри.

Author:  0CodErr [ Thu Sep 07, 2017 6:33 pm ]
Post subject:  Re: BigSample

punk_joker, только всё равно из-под Колибри без нормального редактора проблематично вести разработку. Ну если только что-то по мелочи подправить\добавить\отредактировать.
Вроде бы Leency начинал что-то типа TinyEdit делать. Вероятно, дальше концепта дело не пошло?

Page 1 of 1 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/