Page 1 of 1

Поле i_end в EXE-заголовке

Posted: Mon Jan 16, 2006 5:38 pm
by diamond
В заголовке MENUET-программ есть не совсем понятное поле i_end. Что оно означает? В большинстве программ оно равно длине файла; с другой стороны, длину файла можно определить и независимо. Кроме того, есть прекрасно работающие программы, у которых это поле больше размера файла, а у eyes это поле даже меньше размера файла.
Я смотрел исходники ядра на эту тему. Функция разбора заголовка заносит значение этого поля в глобальную переменную [app_i_end]. При запуске приложения с ramdisk'а (fn 19) эта переменная вообще игнорируется и считывается файл целиком. При запуске через fn 58 считывается
min(filesize, ALIGN_UP(app_i_end,PAGE_SIZE)) байт, что не очень проясняет ситуацию.
Что все-таки это поле означает и для чего оно нужно?

Posted: Mon Jan 16, 2006 10:50 pm
by mike.dld
Насколько я помню, поле это оставлено для совместимости (видимо, когда-то оно было нужно). Сейчас от него толку нет.

Posted: Wed Jan 18, 2006 2:30 pm
by halyavin
Я считаю, что i_end означает сколько байтов должен загрузить загрузчик. Но он может загрузить больше. В соотвествии с этим я и писал процедуры запуска процесса.
Не очень понял, почему ты считаешь, что 19 функция считывает файл целиком. Она сводится к new_start_application_fl как и 58 функция.

Posted: Mon Jan 23, 2006 5:05 pm
by diamond
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_*

Posted: Mon Jan 23, 2006 9:57 pm
by Mario79
diamond
Хех парень да ты понимаешь, кому ты это рассказываешь? :-)
Да он же сам эти процедуры писал, когда внедрял менеджер памяти в ядро.
А я его пытал... ;-)

Posted: Wed Jan 25, 2006 10:37 am
by halyavin
Черт, действительно весь файл целиком считывается. Надо будет поправить как-нибудь...