Board.KolibriOS.org

Official KolibriOS board
It is currently Mon Jul 04, 2022 9:24 am

All times are UTC+03:00




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

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 115
Я изучу код 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: 155
Да там изучать нечего всё в файле tccmeos.c Я знаю как добавить. Но мне некогда. + Есть пример на фасме с dll.obj?

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


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

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

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


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

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

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


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

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

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

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


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

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

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

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


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

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


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

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 115
Только что проверил на последней сборке (#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: 155
Окей чекну завтра. Может туплю

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


Top
   
PostPosted: Thu Dec 09, 2021 10:55 am 
Offline

Joined: Tue Apr 09, 2019 8:57 pm
Posts: 115
Привет!
Функция _ksys_exec ведет себя непредсказуемо, причина - отсутствие установки нуля для поля ksys70_t p20. Если повезет, то там будет ноль и приложение запустится.
Также ноль необходимо устанавливать для p12 и p16. Пока все работает нормально, но если функция 70.7 будет модернизирована, то будут очередные сюрпризы.

Code:
 
static inline
int _ksys_exec(char *app_name, char *args)
{
    ksys70_t file_opt;
    file_opt.p00 = 7;
    file_opt.p04dw = 0;
    file_opt.p08dw = (unsigned)args;
   
    // For future compatible p12 & p 16 must be zero
    file_opt.p12 = 0;
    file_opt.p16 = 0;
   
   file_opt.p20 = 0; // <<==  Zero reqired!
   
    file_opt.p21 = app_name;
    return _ksys_work_files(&file_opt);
}


Top
   
PostPosted: Tue Dec 21, 2021 8:19 am 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 155
Спасибо что сказал. Исправлю. Хотя если уверен можешь и сам исправить.

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


Top
   
PostPosted: Thu Dec 23, 2021 10:55 pm 
Offline
User avatar

Joined: Thu Jun 25, 2020 1:14 am
Posts: 155
Исправлено в #9463

_________________
Изобретайте колёса каждый раз, когда хотите написать новую программу.


Top
   
PostPosted: Thu Dec 30, 2021 5:04 pm 
Offline
User avatar

Joined: Sun Dec 26, 2021 3:04 am
Posts: 26
В libc.obj был баг при использовании sscanf(...): не считывались строки. Например, sscanf("0,0,0", "%d,%d,%d", &a, &b, &c) не работал так, как должен.
Исправил его, а также исправил баг с попыткой считывания шестнадцатеричных и восьмеричных чисел (в той же функции).
Исправленный файл приложил, его нужно загрузить в /programs/develop/ktcc/trunk/libc.obj/source/stdio/format_scan.c. Загрузите на SVN (у меня нет доступа к нему).


Attachments:
format_scan.c [12.33 KiB]
Downloaded 45 times
Top
   
PostPosted: Thu Dec 30, 2021 7:48 pm 
Offline
User avatar

Joined: Mon Oct 27, 2008 10:10 pm
Posts: 939
vitalkrilov wrote:
Исправленный файл приложил, его нужно загрузить в /programs/develop/ktcc/trunk/libc.obj/source/stdio/format_scan.c. Загрузите на SVN (у меня нет доступа к нему).

Загрузил в рев. #9529


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

All times are UTC+03:00


Who is online

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