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 - здесь всё подробно расписано.