Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Nov 17, 2019 12:15 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 124 posts ]  Go to page 1 2 3 4 59 Next
Author Message
 Post subject: Колибри PE
PostPosted: Wed Oct 24, 2007 8:14 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Сделал загрузку РЕ DLL-модулей в ядро. DLL должна линковаться с базовым адресом 0х0000. Модуль грузится функцией load_PE stdcall, file_name:dword. Возвращаемое значение - адрес точки входа в DLL. Связывание с функциями из kernel_export: происходит автоматически при загрузке. Ложка дёгтя: только часть экспортируемых функций ядра можно напрямую вызывать из С программ. В exports.inc они помечены ;stdcall, для остальных нужен промежуточный код ( в основном передача параметров и сохранение регистров).
Ещё можно можно сделать загруку PE программ с автоматической линковкой DLL и общесистемные DLL. Для программ на C и других ЯВУ одну sys.dll c экспортом всех системных вызовов, только надо определиться с синтаксисом и передачей параметров.


Top
   
PostPosted: Wed Oct 24, 2007 9:00 am 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Хорошая новость.
Может вместо sys.dll выбрать другое имя (kos.dll, ksys.dll, kolibri32.dll и т.п.), что бы при "случайном" запуске программы в Windows было бы понятно по имени отсутствующей динамической библиотеки что за дела.

..bw


Top
   
PostPosted: Wed Oct 24, 2007 2:15 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Название не принципиально и расширение может быть любым, только lib плохо подходит потому что будет путаница со статическими библиотеками и implib.


Top
   
PostPosted: Wed Oct 24, 2007 2:53 pm 
Offline

Joined: Wed Feb 21, 2007 3:03 pm
Posts: 188
Вау, вот это новость! Респект!

>Ещё можно можно сделать загруку PE программ с автоматической линковкой DLL и общесистемные DLL.
Если я правильно понимаю, то теперь можно будет реализвать dll в которой будут обертки для системных вызовов колибри. Реализовать такую же для винды. И полноценно пускать и там и там?


Top
   
PostPosted: Wed Oct 24, 2007 2:55 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
k@sTIg@r wrote:
Если я правильно понимаю, то теперь можно будет реализвать dll в которой будут обертки для системных вызовов колибри. Реализовать такую же для винды. И полноценно пускать и там и там?

А нафига?


Top
   
PostPosted: Wed Oct 24, 2007 2:59 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 7:57 pm
Posts: 835
Например, чтобы программы Колибри могли использовать плагины от виндовых программ.

_________________
Всех выше те, кто доброе творят,
И за дела добра не ждут наград,
Всем жертвуют для страждущих людей,
Не думая о выгоде своей.


Top
   
PostPosted: Wed Oct 24, 2007 3:02 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Атауальпа
1. Возможность загрузки PE-exe и PE-dll - разные вещи. Не вижу причин, мешающих Колибри-программе загружать PE-dll при условии поддержки ядра.
2. Для использования плагинов другой программы абсолютно необходима похожесть внутреннего строения - или потребуется очень трудоёмкие усилия по эмуляции plugin api.

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
PostPosted: Wed Oct 24, 2007 3:03 pm 
Offline

Joined: Wed Feb 21, 2007 3:03 pm
Posts: 188
ИМХО, так удобней чем через эмулятор, точнее эмулятор в виде экзешки. И не надо вешать никакие обработчики, а сразу же писать это все дело в виде ф-ций. Возможно даже под WINE'ом удастся поднять.
Но опять же, врядли согласитесь писать приложения которые будут не через syscall'ы работать а через обертки. Насколько помню vectoroc уже предлагал такую схему, но никто не поддержал.


Top
   
PostPosted: Wed Oct 24, 2007 3:05 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
Мне почему-то упорно кажется, что мы пишем свою операционную систему со своими форматами исполняемых файлов и своими системными вызовами...


Top
   
PostPosted: Wed Oct 24, 2007 3:39 pm 
Offline

Joined: Wed Feb 21, 2007 3:03 pm
Posts: 188
мне тоже так казалось.....раньше
Но после обсуждения "расширение запускаемых файлов" я увидел что большинство пользуются эмулятором и основным аргументом было "удобно запускать под эмулятором"...
Но не о том разговор. Стоит ли создавать обертки для системных вызовов?


Top
   
PostPosted: Wed Oct 24, 2007 4:13 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Проблема в том что никто больше наш стандарт исполняемых файлов не поддерживает. Даже портированному Фасму надо его прописывать в двоичном виде. Никакого format KOLIBRI там нет в отличие от COFF ELF и т.п. Так же и в ktcc. Собственно и никаких форматов исполняемых файлов у нас нет. Есть два варианта заголовков 'MENUET00' и 'MENUET01'. Сами заголовки очень примитивны. Там нет таблицы секций, значит нельзя защитить код от переписывания, данные от исполнения и т.д. Выбор coff.obj для драйверов был не совсем удачным решением потому что на практике кроме Фасма такой драйвер больше ни чем не скомпилировать. Не знаю, может это кого-то радует, меня нет. Что касается системных вызовов то сейчас каждый пишет для них свои обёртки. ИМХО стоит разработать общий API для программ на ЯВУ. Вообще лучшим вариантом было бы делать все обращения к ядру только через DLL, скинуть туда всю черновую работу по проверке параметров и таким образом разгрузить ядро и уменьшить код выполняющийся в привилегированном режиме, но это уже другая тема.
Что касается загрузки pe.exe то технически нет никакой разницы. Загрузка .exe даже проще потому что там нет релокаций.


Last edited by Serge on Wed Oct 24, 2007 5:53 pm, edited 1 time in total.

Top
   
PostPosted: Wed Oct 24, 2007 4:59 pm 
Offline
User avatar

Joined: Thu Mar 01, 2007 4:16 pm
Posts: 426
Serge> Название не принципиально и расширение может быть любым
Не скажи.
Если это именно виндовый по формату DLL, то он и должен иметь расширение DLL, что бы небыло лишней путаницы и вопросов. Другое дело, что pe dll для KOS не будут работать в винде, если они используют системные вызовы KOS или не реализованные в винде динамические библиотеки и поэтому лишний раз "светиться" расширением бестолковым в отличных от KOS системах, наверное, не стоит. Тем не менее, я вижу удобство использования существующих форматов в том, что ничего не надо придумывать, существуют сторонние инструменты для работы с ними, существуют компиляторы и линковщики выдающие код в этих форматах, т.е. отсутствует необходимость конвертирования в родной KOS формат (в частности я говорю про компиляторы, которые в KOS ничего сами не сделают).

..bw


Top
   
PostPosted: Wed Oct 24, 2007 5:01 pm 
Offline

Joined: Wed Feb 21, 2007 3:03 pm
Posts: 188
>скинуть туда всю черновую работу по проверке параметров и таким образом разгрузить ядро
ИМХО это не правильно, проверки в ядре должны быть, иначе будут дыры через которые можно убить систему. Либо придется ограничить программы на прямой вызов ядреных функций, что тоже не очень.


Top
   
PostPosted: Wed Oct 24, 2007 5:49 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
bw
По формату виндовый но есть отличия. Раньше секции в файле выравнивались на 512 байт. Сейчас большинство линковщиков выравнивает секции в файле на границу страницы. Такой модуль загружается в память как memory-mapped что упрощает и ускоряет весь процесс загрузки но увеличивает размер файла, особенно если там много секций. ld c ключом --file-alignment 16 уменьшит размер файла но очень вероятно что он не загрузится в Win. Ещё базовый адрес приложений в Колибри 0x0000 а в Win 0x400000. Наконец в Колибри программа и DLL могут быть упакованы так что бинарно они совсем не будут выглядеть как MS PE.

k@sTIg@r
Я не говорил что все проверки, но правильность указателей, строк, путей к файлам и прочие санитарные мероприятия можно проводить и в user-mode. Разумеется в таком случае вызовы ядра должны быть защищены от прямого доступа что не так и сложно. Вообще сначала проверками параметров пренебрегают, а потом жалуются что всё плохо работает.


Top
   
PostPosted: Wed Oct 24, 2007 6:27 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
А поддержка dll формата MS COFF останется ? Меня интересует, не придётся ли переделывать libGUI под формат PE dll ?

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


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

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


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