Koilbri box в Фантоме
-
Вызов может и изящен, а реализация точно нет. После перехода на страничную память приходится делать громоздкий ремаппинг для копирования данных. Скорее надо заново проектировать весь мезанизм IPC.
Упаковкой/распаковкой занимается помимо ядра ещё и приложение kpack (kerpack для ядра).
Упаковкой занимается kpack, распаковкой - kunpack. Но последняя у меня есть только для винды и без исходиков. Интересно, что kpack весит 14 кил, а kunpack - всего 4.
Кстати, kunpack импортирует (из MSVCRT.dll) следующие функции:
Кстати, kunpack импортирует (из MSVCRT.dll) следующие функции:
Spoiler:
Kpack который в Колибри как запаковывает, так и распаковывает приложения, а также упаковывает и ядро. При всем при этом занимает 15 Кб (без упаковки).
Процедура распаковки намного проще, чем процедура упаковки - достаточно посмотреть в код.
Процедура распаковки намного проще, чем процедура упаковки - достаточно посмотреть в код.
Всё равно переписывать её на си и потом ловить баги - немаленькая война. Неужели в виндовых эмуляторах не было сишного распаковщика?Mario wrote:Kpack который в Колибри как запаковывает, так и распаковывает приложения, а также упаковывает и ядро. При всем при этом занимает 15 Кб (без упаковки).
Процедура распаковки намного проще, чем процедура упаковки - достаточно посмотреть в код.
dzavalishin
В unpacker.inc старый lzma распаковщик из 7z. Так что если взять оригинальные исходники должно работать.
В unpacker.inc старый lzma распаковщик из 7z. Так что если взять оригинальные исходники должно работать.
Я правильно понимаю, что заголовок KPACK файла - это два инта - KPCK и размер непакованного файла? Идёт ли вслед за этим lzma заголовок? (В нём тоже есть размер несжатого файла...)Serge wrote:dzavalishin
В unpacker.inc старый lzma распаковщик из 7z. Так что если взять оригинальные исходники должно работать.
LZMA compressed file format
---------------------------
Offset Size Description
0 1 Special LZMA properties (lc,lp, pb in encoded form)
1 4 Dictionary size (little endian)
5 8 Uncompressed size (little endian). -1 means unknown size
Первые два инта точно. Третий содержит байт флагов. На форуме есть пост diamond-а на эту тему. На счёт lzma заголовка не знаю. Это надо упаковщик смотреть.
Kolibri/kolibri_sys_dispatcher: Unimplemented Kolibri syscall eax = -239
= FFFFFFFFFFFFFF11
что бы это значило? Калькулятор такое позвал. Хотел харакири сделать?
= FFFFFFFFFFFFFF11
что бы это значило? Калькулятор такое позвал. Хотел харакири сделать?
Повторить такое удаётся?
core/syscall.inc wrote:movzx eax, al
in code we trust
Ах, вот оно что! Спасибо.mike.dld wrote:core/syscall.inc wrote:movzx eax, al
Калькулятор надо подправить. В документации сказано, что номер функции нужно передавать в eax, а не в al. Хотя, да, в обработчике прерывания 0x40 есть "movzx eax, al" (но я так думаю это чтобы процесс (а в некоторых случаях и ядро вместе с ним) не падал из-за некорректного вызова, потому что размер таблицы servetable2 = 256*4 байт).mike.dld wrote:core/syscall.inc wrote:movzx eax, al
З.Ы. Если когда-нибудь будет использоваться более 256 функций (не дай бог ) придётся переписывать все программы, использующие этот грязный
Если в старших битах гарантированно нули, то не придется, если другое - ну, ССЗБ экономия.
Who is online
Users browsing this forum: No registered users and 6 guests