Page 2 of 3

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 10:52 am
by <Lrz>
Предлагаю KMPE или KMP (Kolibri Modified PE) или
KSF(P) (Kolibry System Format PE)
Не имею ничего против из предложенных ранее.

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 11:32 am
by PhoSor
diamond
Можно и KSPE(Kolibri Specific PE) для точности. А сами исполняемые *.SEx ))

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 11:37 am
by Serge
Меня устроит любая сигнатура, главное чтобы она случайно не совпала с другой. И ещё надо добавить поле типа в заголовок упакованных файлов чтобы система не пыталась запустить всё что загружается.

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 11:54 am
by <Lrz>
Предлагаю Сигнатуру сделать следующиего формата:
'???K' - ??? - основная сигнатура (может быть любая, как вариант, ранее предложенные,), где K - обозначает упакованный Kpack. Если файл не упакован,то вместо K содерижится ' ' или 0x20 или 0х0.

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 12:05 pm
by Serge
diamond

Ещё нужен TimeDateStamp для bound import

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 12:21 pm
by diamond
TimeDateStamp есть в структуре экспорта.
Пожалуй, поле SizeOfHeaders нужно переместить ближе к концу, чтобы в структурах было натуральное выравнивание. Листинг в предыдущем посте сейчас отредактирую.

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 1:10 pm
by Albom
Сигнатура так важна?! чем вам PE не подходит?!

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 2:09 pm
by diamond
Какой-то флейм на пустом месте... Мне, в общем, пофиг на сигнатуру, но флейм надо прекращать. Для определённости пусть сигнатура будет 'KEx' от Kolibri Executable, ни с чем известным мне не конфликтует (беглый поиск в Сети тоже ничего не выявил).
Для типа в упакованных файлах можно задействовать байт по смещению +11 (+0xB) - изначально я погорячился и отвёл на поле для алгоритма сжатия целый dword (+8), в котором реально используется только младший байт (хотя проверяется весь dword). Скажем, 0 может означать generic file, 1 - KEx 32-bit EXE, 2 - KEx 32-bit DLL, 3 - KEx 32-bit driver, 4 - KEx 64-bit EXE, 5 - KEx 64-bit DLL, 6 - KEx 64-bit driver. (Это всё обсуждаемо, естественно.)

Re: Колибри для встроенных систем?

Posted: Thu Jun 18, 2009 2:50 pm
by Serge
diamond

Остаётся решить что делать с уже запакованными файлами. Если их не конвертировать то поле типа не имеет смысла. Загрузчику всё равно придётся распаковывать и проверять каждый файл.

Re: Библиотеки колибри 2.0

Posted: Thu Jun 18, 2009 10:19 pm
by diamond
Уже упакованные файлы можно просто распаковать и упаковать заново новой версией упаковщика (распаковывать можно как старой версией, так и новой).

Re: Библиотеки колибри 2.0

Posted: Sat Jun 20, 2009 7:33 am
by Serge
diamond

Надо определиться с ABI для новых екзешников и с передачей командной строки и переменных окружения.
Предлагаю сделать по примеру System V ABI, но без разделения строк на отдельные аргументы. тогда в стеке будет формироваться такая структура:

Code: Select all

struct {
int argc;              //число аргументов - 1 или 2
char *path_ptr;        //указатель на полный путь. Передаётся всегда
char *cmdline_ptr;     //указатель на командную строку или NULL
char *env_ptr;         //указатель на переменные окружения или NULL

char  path[];          //Полный путь к приложению. Передаётся всегда.
char  cmdline[];       //Командная строка. Передаётся если argc=2
char environment[];    //Переменные окружения. Передаются если env_ptr != NULL
}app_stack;
Дополнительно можно передавать длины строк для упрощения программированиия.

После передачи управления приложению esp будет указывать на начало структуры.

Re: Библиотеки колибри 2.0

Posted: Sat Jun 20, 2009 9:28 am
by bw
Думаю что ком. строка как и окружение, т.е. текущее их представление устарели.
При запуске приложения A, приложением B, очень было бы недурно, что бы последнее могло передавать аргументы в произвольном (двоичном) виде, а не как это принято сейчас. Например, такими данными могут быть, как, действительно, ком. строка, которую ручками наколотил пользователь, так и номер своего PID (или другие данные), используя которые, у приложения A появятся представления о том, куда направить стандартный вывод (а также ошибки, как получить ввод и пр.). Я говорю про случай, когда B, скажем, является командной оболочкой и в состоянии передавать запущенному процессу поток (с клавиатуры, например), а так же получать от него вывод.

cmdline, env и т.д. можно объединить в один массив элементов. Элементом такого массива является примерно следующая структура:

Code: Select all

int  signature; // сигнатура, по которой можно определить формат данных (cmdline, env, inout и т.д.)
int  size;      // размер данных
char data[];    // сами данные
Набор передаваемых данных может быть любым. Главное что бы приложение A (запускаемое), знало, что имеется ввиду под "inout" или "env" и корректно использовало эти значения. Некоторые сигнатуры и соотв. форматы данных можно согласовать уже сейчас.
Пример с PID очень просто, хотя и актуальный. Такими данными ведь может быть и некоторый упакованный графический ресурс, т.е. не ссылка на сам файл (так как файла может и не быть, скажем, если ресурс получен по сети, то его, не сохраняя на диск, можно отобразить по средством стороннего приложения, избегая различных IPC), а именно двоичные данные.

..bw

Re: Библиотеки колибри 2.0

Posted: Sat Jun 20, 2009 10:07 am
by Serge
bw

Для передачи дополнительной информации есть массив векторов auxv_t но не думаю что надо его использовать для передачи raw данных. Стек не безразмерный.

Re: Библиотеки колибри 2.0

Posted: Sat Jun 20, 2009 12:07 pm
by bw
Не понятны две вещи:
1. Где этот auxv_t?
2. Причем здесь стек?

Хотя нет, три:
3. app_stack, где это используется?
3a. Эта структура передается системной функции и необходима для запуска нового приложения?
3b. Эту структуру получает уже запущенное новое приложение?

Наверное уже не в тему, но всё же хотелось бы побольше узнать об auxv_t, его можно использовать в описанной мной задаче, для решения такой локальной проблемы как указание консольной оболочкой новому приложению где его потоки ввода/вывода (например передать pid оболочки, скорее всего, на практике, этого будет достаточно).

..bw

Re: Библиотеки колибри 2.0

Posted: Sat Jun 20, 2009 1:06 pm
by Serge
bw

System V ABI Process Stack and Registers - здесь всё подробно расписано.