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

Kolibri libc - своя libc
https://board.kolibrios.org/viewtopic.php?f=24&t=4391
Page 2 of 2

Author:  Coldy [ Wed May 05, 2021 8:27 pm ]
Post subject:  Re: Kolibri libc - своя libc

Я изучу код ktcc, посмотрю, как это можно прикрутить.
P.S. заголовок в crt0.asm взят в блок virtual, соответственно этих данных в crt0.o нет.
Т.е. это как бы внешнее определение, которое нужно внутри самого crt0.o, чтобы правильно построить ссылки.

Author:  turbocat [ Thu May 06, 2021 1:30 am ]
Post subject:  Re: Kolibri libc - своя libc

Да там изучать нечего всё в файле tccmeos.c Я знаю как добавить. Но мне некогда. + Есть пример на фасме с dll.obj?

Author:  Coldy [ Thu May 06, 2021 12:14 pm ]
Post subject:  Re: Kolibri libc - своя libc

Привет!
Да, я понял, что код для Kolibri генерит tccmeos.c. Но правкой в нем дело не ограничится. Таблица импорта используется другая, ее обработка идет с конца через кучу промежуточных указателей, кроме того сама таблица размазана по всему файлу, имена библиотек зачем то задаются с магическими символами + флаг загрузки и с полным путем. Все это занимает слишком много места в образе и чрезвычайно не оптимально. Сам код загрузчика прикручен гайками к dll.inc, не используя его по прямому назначению. Все что нужно было сделать - это построить правильную таблицу импорта (см. ниже) и скормить ее Dll.Load, он всю работу сам делает. Соответственно, загрузчик крайне неоптимальный (например на каждой функции вызывается load_library, который постоянно проверяет не загружена ли библиотека). Я понимаю, что все это работает, но dll.inc (и соответственно dll.obj) использует совершенно другой более компактный формат таблицы импорта (хотя и его можно уменьшить). В текущем виде это не сможет использоваться с dll.obj, нужно приводить таблицу импорта к формату, который задается макросами library и import из файла macros.inc.
Code:
...
include '../../macros.inc'
...

align 4
 ; Import table
    @IMPORT:
    library foo_lib, 'foo.obj'
    import  foo_lib, \
      foo_bar1, 'foo_bar1',    \
      foo_bar2, 'foo2'


Также я пытался вчера понять, как строится таблица импорта. Как я понял импорты генерятся не ktcc, т.е. он ничего про импорты не знает. Похоже на какие то танцы с бубном.
Расскажи поподробнее как происходит сборка приложения.

Author:  turbocat [ Thu May 06, 2021 1:43 pm ]
Post subject:  Re: Kolibri libc - своя libc

tcc по сути тут не причём. С таблицами импорта он не работает. Всё работает через crt0.o и libc.obj.a. Я так понял, что в libc.obj.a содежатся объектные файлы для каждой импортируемой функции. В них содержится указатель и имя функции. crt0.o читает эти данные и импортирует функции из динамической либы.

Author:  turbocat [ Thu May 06, 2021 1:48 pm ]
Post subject:  Re: Kolibri libc - своя libc

Ты очень много говоришь и я не понимаю. Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме

Author:  Coldy [ Thu May 06, 2021 2:31 pm ]
Post subject:  Re: Kolibri libc - своя libc

turbocat wrote:
Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме

Во вложении, если надо подправь пути. Можно загружать в mtdbg, но загрузка идет сначала в dll.obj, пропускай все F8 пока не увидишь push eax - вызов точки входа приложения, чтобы зайти нажимай F7

Также добавил dll.obj, обнови его в образе, т.к. Tup заработал, но выдал ошибки по последним ревизиям.

Attachments:
hello_console_h2.7z [36.54 KiB]
Downloaded 38 times

Author:  turbocat [ Thu May 06, 2021 9:49 pm ]
Post subject:  Re: Kolibri libc - своя libc

Спасибо! Сейчас посмотрю. Охринеть тупу плохо.

Author:  turbocat [ Wed Jun 23, 2021 12:12 pm ]
Post subject:  Re: Kolibri libc - своя libc

Coldy wrote:
turbocat wrote:
Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме

Во вложении, если надо подправь пути. Можно загружать в mtdbg, но загрузка идет сначала в dll.obj, пропускай все F8 пока не увидишь push eax - вызов точки входа приложения, чтобы зайти нажимай F7

Также добавил dll.obj, обнови его в образе, т.к. Tup заработал, но выдал ошибки по последним ревизиям.


Я что то запустил пример твой сегодня... Не работает... Крашится

Author:  Coldy [ Wed Jun 23, 2021 7:01 pm ]
Post subject:  Re: Kolibri libc - своя libc

Только что проверил на последней сборке (#8929), все работает нормально. Единственное - когда я загрузился первый раз были какие то глюки с сообщениями об ошибке загрузки библиотеки box_lib.obj. Потом после перезагрузки каким то волшебный все заработало нормально.

Author:  turbocat [ Thu Jun 24, 2021 1:00 am ]
Post subject:  Re: Kolibri libc - своя libc

Окей чекну завтра. Может туплю

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