В заголовке MENUET-программ есть не совсем понятное поле i_end. Что оно означает? В большинстве программ оно равно длине файла; с другой стороны, длину файла можно определить и независимо. Кроме того, есть прекрасно работающие программы, у которых это поле больше размера файла, а у eyes это поле даже меньше размера файла.
Я смотрел исходники ядра на эту тему. Функция разбора заголовка заносит значение этого поля в глобальную переменную [app_i_end]. При запуске приложения с ramdisk'а (fn 19) эта переменная вообще игнорируется и считывается файл целиком. При запуске через fn 58 считывается
min(filesize, ALIGN_UP(app_i_end,PAGE_SIZE)) байт, что не очень проясняет ситуацию.
Что все-таки это поле означает и для чего оно нужно?
Поле i_end в EXE-заголовке
Насколько я помню, поле это оставлено для совместимости (видимо, когда-то оно было нужно). Сейчас от него толку нет.
Я считаю, что i_end означает сколько байтов должен загрузить загрузчик. Но он может загрузить больше. В соотвествии с этим я и писал процедуры запуска процесса.
Не очень понял, почему ты считаешь, что 19 функция считывает файл целиком. Она сводится к new_start_application_fl как и 58 функция.
Не очень понял, почему ты считаешь, что 19 функция считывает файл целиком. Она сводится к new_start_application_fl как и 58 функция.
halyavin
Посмотри в core\newproce.inc: там есть три очень похожие, но различные процедуры new_start_application_fl,new_start_application_floppy,new_start_application_hd, причем единственное концептуальное различие (как мне кажется) в том, какую функцию они вызывают для чтения файла: есть три различные процедуры fileread,floppy_fileread и еще какая-то для жесткого диска. При этом код проверки условия конца чтения слегка различается в разных версиях. Посмотри также fs\fs.inc - обработчик 58-й функции: в зависимости от того, передали ему что-нибудь типа /rd/1/*, /floppy/1/*, /hd/1/* он вызывает различные процедуры new_start_application_*
Посмотри в core\newproce.inc: там есть три очень похожие, но различные процедуры new_start_application_fl,new_start_application_floppy,new_start_application_hd, причем единственное концептуальное различие (как мне кажется) в том, какую функцию они вызывают для чтения файла: есть три различные процедуры fileread,floppy_fileread и еще какая-то для жесткого диска. При этом код проверки условия конца чтения слегка различается в разных версиях. Посмотри также fs\fs.inc - обработчик 58-й функции: в зависимости от того, передали ему что-нибудь типа /rd/1/*, /floppy/1/*, /hd/1/* он вызывает различные процедуры new_start_application_*
diamond
Хех парень да ты понимаешь, кому ты это рассказываешь?
Да он же сам эти процедуры писал, когда внедрял менеджер памяти в ядро.
А я его пытал...
Хех парень да ты понимаешь, кому ты это рассказываешь?
Да он же сам эти процедуры писал, когда внедрял менеджер памяти в ядро.
А я его пытал...
Черт, действительно весь файл целиком считывается. Надо будет поправить как-нибудь...
Who is online
Users browsing this forum: No registered users and 17 guests