Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пн июн 26, 2017 8:19 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 70 сообщений ]  На страницу Пред. 1 2 3 4 5
Автор Сообщение
СообщениеДобавлено: Сб ноя 23, 2013 7:45 pm 
Не в сети
Just Flooding

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

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

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


Вернуться к началу
СообщениеДобавлено: Сб ноя 23, 2013 9:00 pm 
Не в сети
Kernel Developer

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


Вернуться к началу
СообщениеДобавлено: Сб ноя 23, 2013 9:20 pm 
Не в сети
Just Flooding

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

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


Вернуться к началу
СообщениеДобавлено: Сб ноя 23, 2013 9:27 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт май 08, 2007 12:44 am
Сообщения: 340
Serge писал(а):
1.Зачем экспорт, длл в pe формате. Велосипед изобретаем только для екзешников.

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

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

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

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

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

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

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

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

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


Вложения:
Pet.7z [20.16 КБ]
72 скачивания

_________________
Разработчик языка программирования Кантор
Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 6:01 am 
Не в сети
Kernel Developer

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 2:42 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт май 08, 2007 12:44 am
Сообщения: 340
Serge писал(а):
Не нужно всем секциям страничное выравнивание, достаточно код от всего остального отделить.

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

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

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

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

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

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

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

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

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 4:50 pm 
Не в сети
Kernel Developer

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 5:25 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт май 08, 2007 12:44 am
Сообщения: 340
Serge писал(а):
Секцию экспорта можно добавить, хотя зачем она в экзешнике ?

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

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

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

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


Вернуться к началу
СообщениеДобавлено: Вс ноя 24, 2013 6:27 pm 
Не в сети
Kernel Developer

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


Вернуться к началу
СообщениеДобавлено: Пн ноя 25, 2013 7:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вт май 08, 2007 12:44 am
Сообщения: 340
Serge писал(а):
С fasm будет облом. Придётся править исходники, чтобы таблицу релокаций в файл записать.

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

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


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 70 сообщений ]  На страницу Пред. 1 2 3 4 5

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB