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

Загрузка библиотек
http://board.kolibrios.org/viewtopic.php?f=1&t=1839
Page 5 of 6

Author:  Serge [ Fri Apr 25, 2014 10:10 pm ]
Post subject:  Re: Загрузка библиотек

Тогда надо сравнивать с этим http://websvn.kolibrios.org/filedetails.php?repname=Kolibri+OS&path=/kernel/trunk/core/dll.inc&peg=4421#line-701 Писалось с нуля по документации.
Я делал оба загрузчика и на асме и на Си, так что могу сравнивать. И количество найденых ошибок в загрузчиках тоже можно сравнить.

Author:  0CodErr [ Wed Oct 19, 2016 7:58 pm ]
Post subject:  Re: Загрузка библиотек

Скопировал из чата:
Quote:
//DG « Ср окт 19, 2016 7:03 pm » CleverMouse, как предполагается пользоваться kolibri.dll из \os? Есть какой-нибудь мануал?
CleverMouse « Ср окт 19, 2016 7:08 pm » //DG: предполагается, что она будет грузиться автоматически ядром
//DG « Ср окт 19, 2016 7:15 pm » Ок, а стандартные GetProcAddress есть или их надо тащить свои с программой? Это же PE DLL?
//DG « Ср окт 19, 2016 7:17 pm » И сейчас оно не грузится автоматом, верно? Мне нужен аллокатор, думаю прикрутить вместо kolibri.asm другой файл для формирования .obj; Динамические файлы obj шарятся между процессами как обычно?
//DG « Ср окт 19, 2016 7:19 pm » 68.19 грузит .obj бибилиотеки?
0CodErr « Ср окт 19, 2016 7:20 pm » Ну вообще, если мы планируем сохранять обратную совместимость, то должна быть возможность грузить библиотеки с помощью SysFn68.19 и получать указатель на таблицу экспорта DLL
0CodErr « Ср окт 19, 2016 7:20 pm » //DG: да, 68.19 грузит .obj
//DG « Ср окт 19, 2016 9:23 pm » Если перелицевать \os под .obj тот же функуионал останется, только ее станет возможным грузить через 19ф. Пожалуй, возьму этот аллокатор. Теперь осталось изучить ваш процесс сборки (кто-нибудь может меня ткнуть носом в документ?)
CleverMouse « Ср окт 19, 2016 9:24 pm » //DG: прямо сейчас загрузить транковым ядром kolibri.dll как есть вообще нельзя
CleverMouse « Ср окт 19, 2016 9:24 pm » когда-нибудь будет можно
//DG « Ср окт 19, 2016 9:24 pm » "получать указатель на таблицу экспорта DLL" Мне казалось, что у obj она всегда вначале... Где этот формат описан?
//DG « Ср окт 19, 2016 9:25 pm » CleverMouse: а какие там ограничения? Просто ядро не грузит еще ПЕшки или есть какие-то подводные камни, если я буду под .obj переделывать?
CleverMouse « Ср окт 19, 2016 9:30 pm » просто ядро не грузит PE, подводных камней вроде нет
0CodErr « Ср окт 19, 2016 9:31 pm » CleverMouse: а это что делает? http://websvn.kolibrios.org/filedetails ... peload.inc
CleverMouse « Ср окт 19, 2016 9:32 pm » 0CodErr: это для драйверов
0CodErr « Ср окт 19, 2016 9:32 pm » CleverMouse: :) хм, странно, PE ведь же тоже.
0CodErr « Ср окт 19, 2016 9:34 pm » CleverMouse: а что насчёт обратной совместимости при загрузке SysFn68.19 в будущем
CleverMouse « Ср окт 19, 2016 9:38 pm » 0CodErr: PE DLL не нужно грузить функцией ядра. PE DLL нужно грузить вызовом одной из функций userspace-компонента kolibri.dll
0CodErr « Ср окт 19, 2016 9:41 pm » CleverMouse: ну, хорошо, вот смотри, в той же винде можно делать loadlibrary+getprocaddress. В Колибри так нельзя будет?
CleverMouse « Ср окт 19, 2016 9:42 pm » 0CodErr: так и будет, только loadlibrary/dlopen - это не вызов ядра, а функция в userspace
0CodErr « Ср окт 19, 2016 9:43 pm » CleverMouse: а, ну понятно. То есть, 68.19 для PE работать не будет?
CleverMouse « Ср окт 19, 2016 9:44 pm » 0CodErr: нет, не будет
0CodErr « Ср окт 19, 2016 9:45 pm » CleverMouse: а останется ли поддержка MSCOFF библиотек?
CleverMouse « Ср окт 19, 2016 9:47 pm » 0CodErr: на переходный период - да, только шаринг страниц между разными процессами перестанет иметь место для COFF, его неудобно поддерживать для COFF и PE сразу

Author:  dunkaist [ Wed Nov 01, 2017 1:04 am ]
Post subject:  Re: Загрузка библиотек

Girls and guys,

AFAIK from forums and chat logs a patch by CleverMouse implements all we need for PE. It is also a non-breaking change for existing applications. I rebased the patch to current svn trunk, checked and attached it.

Is there any reason to not merge? Anything to discuss? We could finish transition to PE this year.

Attachments:
pe2.diff [139.78 KiB]
Downloaded 176 times

Author:  CleverMouse [ Thu Nov 02, 2017 6:00 pm ]
Post subject:  Re: Загрузка библиотек

"Non-breaking change" - не совсем верно: для приложений изменения действительно прозрачны, но патч ломает разделение физической памяти под копиями COFF-библиотек в разных процессах.
"all we need for PE" - совсем неверно: то, что есть, должно работать, но некоторых важных вещей нет. В порядке убывания важности:
* вызов DllMain при загрузке/выгрузке DLL
* static TLS (__declspec(thread) в msvc / __thread в gcc / _Thread_local в стандарте C11)
* возврат из главной функции процесса должен приводить к завершению всех потоков процесса, а не только главного. Конфликтует с текущей реализацией консоли, поэтому окно консоли надо выносить в отдельный процесс - заодно позволит сделать консоль, разделяемую между несколькими процессами
* биндилка импортов для автосборки

Author:  0CodErr [ Wed Sep 19, 2018 5:34 pm ]
Post subject:  Re: Загрузка библиотек

Интересный вопрос насчёт иконок в StrippedPE.
Директория ресурсов, как я понял, предусмотрена.
Если хранить иконки там, то чтобы их оттуда достать(чтобы отобразить где-то) придётся сначала распаковать файл.
Так как приложения у нас в данный момент не имеют расширения, то может получиться, что пред нами не приложение, а файл с какими-то данными(не важно), размером эдак 100Мб.
В той теме viewtopic.php?f=26&t=3621 я пытался кое-что придумать, но видимо никому больше это не нужно.

Просто интересно, как планируется работа с ресурсами, в частности с иконками.

Author:  Boppan [ Sun Apr 26, 2020 5:10 pm ]
Post subject:  Re: Загрузка библиотек

Q for masters: how can OS share DLL between processes if in different ones the DLL may be loaded in different base addresses (and relocated, so that code of DLL in address space of App1 differs from code of DLL in App2's address space).

I get the result on Windows: if some conditions are met, HMODULE of the same DLL in different apps may be different. Does it mean that Windows does not share DLL between apps or may sometimes have several instances of it loaded?

Author:  mkostoevr [ Sun Apr 26, 2020 5:42 pm ]
Post subject:  Re: Загрузка библиотек

Yep, sometimes you can't map existing in memory DLL where is supposed to be (mb, the memory in process address space is already in use), so you have to make one more copy of DLL and relocate it again.

Author:  Boppan [ Thu Apr 30, 2020 2:50 pm ]
Post subject:  Re: Загрузка библиотек

Ok, what's conclusion? Do we need new executable and library formats or kernel developers desided leave it as is?

If kernel devs have any roadmap, let me see it, I'l try to help to imeplement anything in that direction.

Author:  dunkaist [ Sun Oct 18, 2020 1:27 am ]
Post subject:  Re: Загрузка библиотек

Hi again,

I merged the patch manually to the current master main trunk. It still works.

CleverMouse wrote:
"all we need for PE" - совсем неверно: то, что есть, должно работать, но некоторых важных вещей нет. В порядке убывания важности:
* вызов DllMain при загрузке/выгрузке DLL
* static TLS (__declspec(thread) в msvc / __thread в gcc / _Thread_local в стандарте C11)
* возврат из главной функции процесса должен приводить к завершению всех потоков процесса, а не только главного. Конфликтует с текущей реализацией консоли, поэтому окно консоли надо выносить в отдельный процесс - заодно позволит сделать консоль, разделяемую между несколькими процессами
* биндилка импортов для автосборки

CleverMouse,
you listed the tasks in priority order. Is it also the order to implement them?

Could you describe the steps above in more detail in case somebody wants to work on PE.

Attachments:
pe3.diff [145.12 KiB]
Downloaded 37 times

Author:  Boppan [ Fri Nov 06, 2020 11:40 pm ]
Post subject:  Re: Загрузка библиотек

Do you really want PE executables and libraries in KolibriOS? And no one aganist making system calls more indirect? And aganist a little executable files bloating? And aganist kernel-mode PE loader?

If no kernel developer minds that, IT'S FRICKING GREAT!

Author:  Boppan [ Fri Nov 06, 2020 11:45 pm ]
Post subject:  Re: Загрузка библиотек

0CodErr wrote:
Интересный вопрос насчёт иконок в StrippedPE.
Директория ресурсов, как я понял, предусмотрена.
Если хранить иконки там, то чтобы их оттуда достать(чтобы отобразить где-то) придётся сначала распаковать файл.


Не обязательно сжимать весь файл - можно научиться сжимать и распаковывать отдельные секции, как это реализовано в эльфах.

И изменения в формате PE лучше не слишком большие делать, шоб не было гемора с переписыванием кода существующих тулзов.

Author:  dunkaist [ Sat Nov 07, 2020 12:56 pm ]
Post subject:  Re: Загрузка библиотек

Boppan,

It was agreed that (Stripped)PE will replace MENUETxx format for binaries and COFF for libraries.
Afaik, nobody is working on it. You are welcome.

PE examples are here. Things to implement are here.

Author:  ProMiNick [ Sun Nov 22, 2020 7:02 pm ]
Post subject:  Re: box_lib.obj - библиотека gui компонентов

IgorA wrote:
rev 8236, 8237
Программы free3d, use_mb, fasm, h2d2b, heed и несколько примеров перевел на новый макрос.

да не балуйся уже с этим макросом, я озадачился загрузчик в ядро поместить.
Совместимость с менуэтом00,01,02 будет сохранена, в отношении всех этих версий формата система научится грузить либы автоматом, но и если они не готовы грузить импорты автоматом такого происходить не будет.
Code:
struct  APP_HEADER_IMPORTS
        banner          dq ?
        version         dd ?    ;+8
        start           dd ?    ;+12
        i_end           dd ?    ;+16
        mem_size        dd ?    ;+20
                        dd ?    ;+24
                        dd ?    ;+28
                        dd ?    ;+32
        imports         dd ?
ends

no matter what menuet version,
will be tested content of [imports] field
for imports take place will be tested
that content of [imports] is non zero, content fits in initialized size stored in [i_end],
and finaly that content of [imports] points to special marker.
Если все условия будут соблюдены система сама раскрутит импорты.
Если нет - поведение будет старое - т.е. совместимое.

Author:  dunkaist [ Sun Nov 22, 2020 8:33 pm ]
Post subject:  Re: box_lib.obj - библиотека gui компонентов

ProMiNick wrote:
да не балуйся уже с этим макросом, я озадачился загрузчик в ядро поместить.
Coldy already implemented this about a year ago.
It wasn't merged to trunk. May be because automatic loading of libraries was also implemented for PE.
When somebody will implement features of this list, loading of libraries will be merged to trunk automatically.
Your approach looks like a double work which you are free to do of course.

Author:  ProMiNick [ Sun Nov 22, 2020 10:01 pm ]
Post subject:  Re: box_lib.obj - библиотека gui компонентов

I have no idea how to implement features in the list. so if for a year PE couldn`t be released so it could be never released.
But what i going to do now will make coding simplier already now, but not in abstraction future.

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