Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Aug 01, 2021 4:17 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 25 posts ]  Go to page Previous 1 2
Author Message
PostPosted: Wed May 05, 2021 8:27 pm 
Offline

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 58
Я изучу код ktcc, посмотрю, как это можно прикрутить.
P.S. заголовок в crt0.asm взят в блок virtual, соответственно этих данных в crt0.o нет.
Т.е. это как бы внешнее определение, которое нужно внутри самого crt0.o, чтобы правильно построить ссылки.


Top
   
PostPosted: Thu May 06, 2021 1:30 am 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 80
Да там изучать нечего всё в файле tccmeos.c Я знаю как добавить. Но мне некогда. + Есть пример на фасме с dll.obj?

_________________
Gentlemen, has it occurred to you to use libc.obj instead of "reinventing the wheel"?


Top
   
PostPosted: Thu May 06, 2021 12:14 pm 
Offline

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 58
Привет!
Да, я понял, что код для 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, т.е. он ничего про импорты не знает. Похоже на какие то танцы с бубном.
Расскажи поподробнее как происходит сборка приложения.


Top
   
PostPosted: Thu May 06, 2021 1:43 pm 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 80
tcc по сути тут не причём. С таблицами импорта он не работает. Всё работает через crt0.o и libc.obj.a. Я так понял, что в libc.obj.a содежатся объектные файлы для каждой импортируемой функции. В них содержится указатель и имя функции. crt0.o читает эти данные и импортирует функции из динамической либы.

_________________
Gentlemen, has it occurred to you to use libc.obj instead of "reinventing the wheel"?


Top
   
PostPosted: Thu May 06, 2021 1:48 pm 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 80
Ты очень много говоришь и я не понимаю. Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме

_________________
Gentlemen, has it occurred to you to use libc.obj instead of "reinventing the wheel"?


Top
   
PostPosted: Thu May 06, 2021 2:31 pm 
Offline

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 58
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 35 times
Top
   
PostPosted: Thu May 06, 2021 9:49 pm 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 80
Спасибо! Сейчас посмотрю. Охринеть тупу плохо.

_________________
Gentlemen, has it occurred to you to use libc.obj instead of "reinventing the wheel"?


Top
   
PostPosted: Wed Jun 23, 2021 12:12 pm 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 80
Coldy wrote:
turbocat wrote:
Мне нужен живой пример для импорт например console.obj через твою dll.obj на фасме

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

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


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

_________________
Gentlemen, has it occurred to you to use libc.obj instead of "reinventing the wheel"?


Top
   
PostPosted: Wed Jun 23, 2021 7:01 pm 
Offline

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 58
Только что проверил на последней сборке (#8929), все работает нормально. Единственное - когда я загрузился первый раз были какие то глюки с сообщениями об ошибке загрузки библиотеки box_lib.obj. Потом после перезагрузки каким то волшебный все заработало нормально.


Top
   
PostPosted: Thu Jun 24, 2021 1:00 am 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 80
Окей чекну завтра. Может туплю

_________________
Gentlemen, has it occurred to you to use libc.obj instead of "reinventing the wheel"?


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 25 posts ]  Go to page Previous 1 2

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 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