1 (изменено: Freeman, 05.12.2020 в 18:40)

Тема: PE Tool для KolibriOS

Заранее извиняюсь, если это вдруг будет не совсем по теме.
Я вообще писал на электронную почту.
Но так как ответа не получил, то подумал, что моё сообщение не дошло или попало в спам.

Хотел с помощью Pet сделать "-rebase 00000000" для сборки приложения под KolibriOS с помощью exe2kos.
Но Pet не хочет делать "-rebase 00000000". Вроде бы в исходнике Pet есть такая проверка, но с чем это связано - не понятно.

То есть, я хочу сделать так: .dpr-->dcc32-->EXE-->pet-->exe2kos-->KEX
В принципе и так работает, но размер получается больше, хотя там просто нули, и это сжимается упаковщиком, но лишнюю память занимает.

Я сейчас использую минимальный system+sysinit, хотя, конечно, для полноценной работы этого не достаточно.

Если интересно, то вот такой пример:

Выводит в консоль полный путь к файлу, параметры командной строки, текущую директорию.
Устанавливает директорию программы в качестве текущей(SetCurrentDirectory).
Выводит размер файла с программой в байтах.
Создаёт в папке с программой новую папку(CreateDirectory) "NewFolder" и копирует(ReadFile+WriteFile) туда файл с программой.
В самой ОС работает, а под KlbrInWin глюк, похоже не верно обрабатывается текущая директория.

make(Test).bat чтобы собрать этот пример.

misc.php?action=pun_attachment&item=13&download=1&secure_str=22t25

Кое-что я писал ещё там http://kolibriosandfasm.mybb.ru/viewforum.php?id=9
Кому-то там, насколько помню, было это раньше интересно.

Post's attachments

Иконка вложений Test_Delphi7_dpr_exe2kos.7z 72.02 Кб, 146 скачиваний с 2019-07-10 

2

Re: PE Tool для KolibriOS

Я решил поступить в стиле KolibriOS — молчать, чтобы автор нашел решение сам... Что именно непонятно в исходниках?

3

Re: PE Tool для KolibriOS

Freeman пишет:

Что именно непонятно в исходниках?

0CodErr пишет:

Вроде бы в исходнике Pet есть такая проверка, но с чем это связано - не понятно.

Сейчас размер приложения под KolibriOS получается даже больше, чем под Windows(более чем в 1,5 раза).
Я имею в виду, если делать, как вон в той теме http://kolibriosandfasm.mybb.ru/viewtopic.php?id=24
Но это не такая уж большая проблема — это хорошо сжимается упаковщиком, проблема в том, что память лишнюю занимает.

4

Re: PE Tool для KolibriOS

0CodErr пишет:

Но Pet не хочет делать "-rebase 00000000". Вроде бы в исходнике Pet есть такая проверка, но с чем это связано - не понятно.

Из выводимой на экран справки:

-rebase <[$]######[h]>  Rebase image to <####>×64K bound or to
                        hexadecimal address <$########> or <########h>

Адрес 0 (достаточно одного нуля) трактуется как относительное смещение, равное числу сегментов по 64 КБ.

5

Re: PE Tool для KolibriOS

Freeman пишет:

Адрес 0 (достаточно одного нуля) трактуется как относительное смещение, равное числу сегментов по 64 КБ.

Гм. Похоже, что это баг. Точнее, это следствие текущей реализации, в концепциях которой дырка.

Мнимый оптимизатор

Экземпляр TApplication инициализируется нулями при старте приложения. Значение 0 используется в роли признака "параметр -rebase не задан". То есть, если задать -rebase 0, для программы это неотличимо от отсутствия -rebase в командной строке, и Rebase физически не вызывается. Поскольку в текущей реализации значения меньше 64К считаются относительными смещениями, такая логика соответствует оптимизации по типу частичных вычислений.

Перебазирование на 0 физически допустимо в PE, даже если получаемые образы будут невалидны для Windows. PE Tool не ограничена логикой Windows. По-видимому, нужно отработать 0 как особый случай (и отличать его от null), сделав его абсолютным адресом. Это не противоречит текущей концепции PE Tool с выпиленными форматами MENUET0x.

6 (изменено: Freeman, 05.12.2020 в 18:39)

Re: PE Tool для KolibriOS

В той теме ответить не получилось, поэтому тут. Ведь это же к PE Tool относится, верно?

Freeman пишет:

перебазирование можно/придется делать не на 0, а на размер заголовка

Ну по сути, да, тот код, что идёт после заголовка, начинается уже не с нуля.

Freeman пишет:

секции лучше выровнять на 8 или 16 байт, а не 512

Если с целью экономии места, то вполне логично, думаю.
Нужно ещё учитывать существование AVX и AVX-512. Думаю, это не случайно, что в компиляторе Intel Фортран есть опция -align array32byte.

Freeman пишет:

Выбор формата MENUET01 или MENUET02 делается автоматически на основе наличия TLS

Возможно, что когда-то всё-таки приложения тоже будут формата PE, надо на будущее учитывать.
Для библиотек это точно планировалось, вот websvn.kolibrios.org/filedetails.php?re … onsole.asm

format PE console 0.8 DLL at 7FEF0000h

Судя по websvn.kolibrios.org/filedetails.php?re … upfile.lua
и наличию там PESTRIP_CMD, это такой же StrippedPE, как и у драйверов.

0CodErr пишет:

Хотел с помощью Pet сделать "-rebase 00000000" для сборки приложения под KolibriOS с помощью exe2kos.

Я тут теперь пошёл немного дальше.
Один и тот же исходник Test.dpr можно собрать под две ОС.
Один make.bat собирает приложение(kex, MENUET01) для KolibriOS, второй make.bat — приложение(exe, PE) для Windows.
kolibriosandfasm.mybb.ru/viewtopic.php?id=24

7 (изменено: Freeman, 14.06.2020 в 17:08)

Re: PE Tool для KolibriOS

0CodErr пишет:

В той теме ответить не получилось, поэтому тут. Ведь это же к PE Tool относится, верно?

Стоило заругаться, как ответ сразу нашелся.

0CodErr пишет:

Судя по websvn.kolibrios.org/filedetails.php?re … upfile.lua
и наличию там PESTRIP_CMD, это такой же StrippedPE, как и у драйверов.

Формат StrippedPE нигде не описан, чтобы его можно было поддержать.

8

Re: PE Tool для KolibriOS

Freeman пишет:

Перебазирование на 0 физически допустимо в PE, даже если получаемые образы будут невалидны для Windows.

В бете PE Tool 0.6 допустимо перебазирование на любой адрес. На практике оказалось, что база 0 валидна, приложение запускается под Windows. Можно экспериментировать с перебазированием под KolibriOS.

Есть вопрос. Раньше базовые адреса в десятичном виде трактовались как сегменты по 64К. Поскольку перебазировать теперь можно куда угодно, зарезервировал значения 1..31 как степени двойки, -rebase 5 перебазирует на $20. Теперь кажется, что это не так удобно. Вернуть сегменты?

9

Re: PE Tool для KolibriOS

Freeman пишет:

Можно экспериментировать с перебазированием под KolibriOS.

Попробовал, работает.

Freeman пишет:

Раньше базовые адреса в десятичном виде трактовались как сегменты по 64К. Поскольку перебазировать теперь можно куда угодно, зарезервировал значения 1..31 как степени двойки, -rebase 5 перебазирует на $20. Теперь кажется, что это не так удобно. Вернуть сегменты?

Мне кажется, что после "-rebase" должен идти просто адрес(хоть в десятичном, хоть в шестнадцатиричном формате), меньше путаницы.
Или можно прямо так и писать: "-rebase 64K", "-rebase 256K" и т.п.

10

Re: PE Tool для KolibriOS

0CodErr пишет:

Попробовал, работает.

Размер бинарника MENUET изменился? На сколько?

0CodErr пишет:

Мне кажется, что после "-rebase" должен идти просто адрес(хоть в десятичном, хоть в шестнадцатиричном формате), меньше путаницы.
Или можно прямо так и писать: "-rebase 64K", "-rebase 256K" и т.п.

Теперь мне тоже так кажется. Над добавлением суффикса “K” подумаю. Это по-канторовски.