Board.KolibriOS.org

Official KolibriOS board
It is currently Thu May 23, 2019 12:08 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 70 posts ]  Go to page Previous 1 2 3 4 5
Author Message
PostPosted: Sat Nov 23, 2013 7:45 pm 
Offline
Just Flooding

Joined: Fri Nov 08, 2013 2:49 pm
Posts: 19
8-байтная сигнатура - излишество. Достаточно 4 или даже 2.
Если добавить в заголовок версию заголовка, то в будущем можно будет добавлять в заголовок новые поля не нарушая совместимости.
Если добавить в заголовок информацию о целевой платформе, то можно будет опеспечить единый формат файла для 32/64/.. систем.
cmdline и последующие поля в заголовке не нужны. Если программе нужна командная строка и пр. - пусть вызывает ПолучитьКоманднуюСтроку().
Нет секции ресурсов.
Нет значка.

Выравнивание секций: я вообще за линейный файл без деления на секции. Единственная нужная "секция" - размер области неициализированных данных. Все остальные секции сплошняком. Если автора программы заботит скорость - он сам выровняет их размер, который посчитает нужным.

"For better flexibility" код должен быть позиционно-независимым, как следствие imagebase бесполезен.


Top
   
PostPosted: Sat Nov 23, 2013 9:00 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Freeman
1.Зачем экспорт, длл в pe формате. Велосипед изобретаем только для екзешников.
2.Явно начало секции указано только для import, что необходимо. Если ecode выравнен на страницу, секция кода может быть защищена от записи, остальные соответственно от исполнения. eimport и edata похоже действительно лишние. Файл приложения это образ в памяти, никаких секций, смещённых относительно своих виртуальных адресов. Если выравнивание требует заполнение промежутков, значит там будут nop-ы.


Top
   
PostPosted: Sat Nov 23, 2013 9:20 pm 
Offline
Just Flooding

Joined: Fri Nov 08, 2013 2:49 pm
Posts: 19
1. Зачем два формата?
2. Необходимо кому? Процессор этого не требует, значит этого требует программист. Назови его имя.

Защита от исполнения и записи во многом бессмыслена: закроет ядро программу из-за исполнения недостимой инструкции или из-за обращения к недопустимой странице памяти - программу закроют.


Top
   
PostPosted: Sat Nov 23, 2013 9:27 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Serge wrote:
1.Зачем экспорт, длл в pe формате. Велосипед изобретаем только для екзешников.

Тогда изобретать собственный формат и правда глупо.

У меня написана утилита для работы с образами PE, которую можно было бы научить сохранять и в MENUET01, и в KOLIBRI, делая rebase и перетасовывая секции как нужно. Думал создать для нее тему.

Serge wrote:
Если ecode выравнен на страницу, секция кода может быть защищена от записи, остальные соответственно от исполнения. eimport и edata похоже действительно лишние. Файл приложения это образ в памяти

Ты уж определись: или образ в памяти, или защита. Предположим, у меня есть 600 байт кода, 40 байт данных и еще 600 байт импорта. Если файл -- образ в памяти, с заголовком выходит 1288 байт. Если же при этом нужна защита, имеется три секции: код с защитой от записи, данные с защитой от исполнения и импорты с защитой от (чего?). При 4 КБ на страницу получаем файл размером 12336 байт, если он по-прежнему образ в памяти. Разве не так? Ни фига себе "Колибри"!

Добавлено: Впрочем, даже в PE выравнивание в файле и в памяти может отличаться...

Я подразумевал, что если загрузчик знает размеры секций, он их сможет растасовать их по страницам, которые и займут в памяти 12 КБ, а файл при этом останется 1288 байт, что более привычно для "Колибри".

Если код и импорты с экспортами имеют одни и те же флаги защиты, их можно объединить, тогда надо еще подумать, как это наиболее технологично сделать.

Добавлено: Неожиданно быстро удалось прикрутить сохранялку в формат KOLIBRI (концепт). Порядок секций такой же, как в описании: код, импорты, экспорты, данные. Rebase не делается, image base прописывается исходный. Вызывать:
Code:
pet my.dll -into my -kolibri -strip -trunc

В режиме -strip выравнивание не делается, иначе выравнивается на 8 байт. Ключ -trunc запрещает выравнивать последнюю секцию (данные).


Attachments:
Pet.7z [20.16 KiB]
Downloaded 128 times

_________________
Разработчик языка программирования Кантор
Top
   
PostPosted: Sun Nov 24, 2013 6:01 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Freeman wrote:
Ты уж определись: или образ в памяти, или защита. Предположим, у меня есть 600 байт кода, 40 байт данных и еще 600 байт импорта. Если файл -- образ в памяти, с заголовком выходит 1288 байт. Если же при этом нужна защита, имеется три секции: код с защитой от записи, данные с защитой от исполнения и импорты с защитой от (чего?).
Импорт с защитой от исполнения. Не нужно всем секциям страничное выравнивание, достаточно код от всего остального отделить. И не хочется делать многосекционный файл, чтобы потом каждую секцию на своё место копировать. Экономия дискового пространства копеечная, а файл традиционно будет сжат kpack.
Утилита это хорошо, но есть порт ld, генерирующий бинарник в родном формате Колибри. Обновить его под новый заголовок дело на один вечер. А для fasm пара макросов нужна. Хотя, если таким образом конвертировать PE других компиляторов, будет неплохо.


Top
   
PostPosted: Sun Nov 24, 2013 2:42 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Serge wrote:
Не нужно всем секциям страничное выравнивание, достаточно код от всего остального отделить.

Да, я потом уже вспомнил, что раз в PE выравнивание в файле отличается от страничного, то можно как-то по-другому.

Serge wrote:
И не хочется делать многосекционный файл, чтобы потом каждую секцию на своё место копировать. Экономия дискового пространства копеечная, а файл традиционно будет сжат kpack.

А ты пока не копируй, оставь на вторую версию. :lol: Мне кажется, что если уж принимать новый формат, в нем должен быть потенциал для роста. Не куча мусора, как в PE, но минимальная дополнительная инфа должна присутствовать. В будущем ее можно будет интерпретировать как-то по-другому.

Размеры блоков (раз уж слово "секции" не нравится) -- как раз такая инфа. Она и неизбыточна, и позволит проделывать более сложные манипуляции в дальнейшем, не трогая программы. Блок экспорта и "-1" для аналога консольного приложения -- тоже потенциал для улучшений.

Поскольку моя версия заголовка получилась размером 60 байт, наверное, ее стоит дополнить еще одним зарезервированным двойным словом в конце, чтоб уж 64 было. Сейчас 64 байта заголовок имеет только при включенном выравнивании, что мне кажется в стиле "Колибри".

Serge wrote:
Хотя, если таким образом конвертировать PE других компиляторов, будет неплохо.

Да-да, и я о том же. Нужно только формат утвердить. Видеть PE в качестве основного формата "Колибри" мне не хотелось бы. Это и к имиджу минус, и проблем с антивирусами не избежать.

MENUET01 для обратной совместимости останется? Со временем его тоже в Pet добавлю тогда.

_________________
Разработчик языка программирования Кантор


Top
   
PostPosted: Sun Nov 24, 2013 4:50 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Freeman
Обратная совместимость это святое.
Про флаг консольного приложения тоже думал. Секцию экспорта можно добавить, хотя зачем она в экзешнике ? Ещё есть желание добавить .debug секции, но тут надо с форматом разбираться.


Top
   
PostPosted: Sun Nov 24, 2013 5:25 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Serge wrote:
Секцию экспорта можно добавить, хотя зачем она в экзешнике ?

Так я же писал. Размер секции экспорта равен 0 -- приложение, ненулевой размер -- библиотека. Подбиваю тебя на единый формат для приложений и библиотек. ;)

Размер секции с отладочной инфой можно тоже добавить -- как раз последние 4 байта остались до 64.

Еще думал, как вместить перемещаемые символы (релоки), если понадобится для библиотек. Наверное, нужно добавить флаг (в те самые три байта), и тогда трактовать поле ImageBase как размер секции релоков, а фактический ImageBase в таком хранить уже в секции релоков, в ее заголовке.

_________________
Разработчик языка программирования Кантор


Top
   
PostPosted: Sun Nov 24, 2013 6:27 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Подбиваю тебя на единый формат для приложений и библиотек.
С fasm будет облом. Придётся править исходники, чтобы таблицу релокаций в файл записать. И не уверен я в необходимости единого формата.


Top
   
PostPosted: Mon Nov 25, 2013 7:05 pm 
Offline
User avatar

Joined: Tue May 08, 2007 12:44 am
Posts: 346
Serge wrote:
С fasm будет облом. Придётся править исходники, чтобы таблицу релокаций в файл записать.

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

_________________
Разработчик языка программирования Кантор


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

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