Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Jun 15, 2021 11:58 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 22 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: 56
Я изучу код 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: 65
Да там изучать нечего всё в файле tccmeos.c Я знаю как добавить. Но мне некогда. + Есть пример на фасме с dll.obj?

_________________
За tcc и двор стреляю в упор!


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

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 56
Привет!
Да, я понял, что код для 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: 65
tcc по сути тут не причём. С таблицами импорта он не работает. Всё работает через crt0.o и libc.obj.a. Я так понял, что в libc.obj.a содежатся объектные файлы для каждой импортируемой функции. В них содержится указатель и имя функции. crt0.o читает эти данные и импортирует функции из динамической либы.

_________________
За tcc и двор стреляю в упор!


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

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

_________________
За tcc и двор стреляю в упор!


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

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

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

_________________
За tcc и двор стреляю в упор!


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 22 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