Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
НавчПос_ЗОС.doc
Скачиваний:
90
Добавлен:
16.05.2015
Размер:
7.05 Mб
Скачать

5.2.1 Стискання виконуваних файлів

На ринку з'явилося декілька програм-компресорів, з яких найбільшу популярність завоювала програма ASPack, що вміє стискати і розтискати не тільки "екзешники", але і динамічні бібліотеки. А до складу самої Windows 95 увійшла динамічна бібліотека LZEXPAND.DLL, яка підтримувала базові опе­рації пакування-розпакування і "прозору" роботу зі стиснутими файлами. Користувачі і програмістишвидкоскористалися новими засобами, але...

На відміну від MS-DOS, у Windows 9x\NT за автоматичне роз­па­ку­вання приходиться платити більше, ніж одержувати. Згадаємо, як у MS-DOS відбувалося завантаженнявиконуваних модулів. Файл цілком зчи­ту­вав­ся з диска і копіювався в оперативну пам'ять, причому найбільш вузь­ким місцем була саме операція читання з диска.Пакування навіть прискорювало завантаження,оскількифізично читався менший обсяг даних, а їх розпакування займалодужекороткий час.

У Windows же завантажник читає лише заголовок і таблицю імпорту файлу, а потім проектує його на адресний простір процесу так, ніби-то файл є частиною віртуальної пам'яті, що зберігається на диску (взагалі ж,всевідбувається набагато складніше). Підкачування з диска відбуваються динамічно–уміру звернення до відповіднихсторінокпам'яті, причому завантажуються тільки ті з них, що дійсно потрібні.

Наприклад, якщо в текстовому редакторі є модуль роботи з табли­цями, він не буде завантажений з диска доти, поки користувач не захоче створити (чи відобразити) свою таблицю. Причому неважливо–чи знахо­диться цеймодуль у динамічній бібліотеці, чив основному файлі.Завантаження таких "монстрів", як Microsoft Visual Studio і Word,ніби "розмазується" у часі,і до роботи з додатком можна приступати практично відразу ж після його запуску. А щож відбудеться, якщо файл упакувати?Він повинен будезчитуватисяз диска цілком (!) і потім–знову-таки, цілком–розпакуватися в оперативну пам'ять.

Але ж нашої оперативної пам’ятіявно не вистачить і розпаковані сторінки прийдеться знову скидати на диск. Причому, якщо при проектуванні неупакованого exe-файлу оперативна пам'ять не виділяється (у всякому разі, доти, поки в ній не виникне необхідність), распаковщику без пам'яті ніяк не обійтися.А оскільки оперативної пам'яті ніколи не буваєзанадто, вона може бути виділена лише за рахунок інших додатків.Відзначимо також, що в силу конструктивних особливостей заліза й архітектури операційної системи, операція записуванняна дискє помітно повільнішою заопераціюзчитування.

Важливо зрозуміти: Windows ніколи не скидає на диск не модифі­ко­вані сторінки файлу, що проектується. Навіщо це? Адже в будь-який мо­мент їх можна зновузчитатиз оригінального файлу. Але при розпакуванні модифікуються всі сторінки файлу! Виходить, система буде змушена "ганяти" їх між диском і пам'яттю, що істотно знизить загальну продуктивність усіх додатків у цілому.

5.2.2 Стискання динамічних бібліотек

Ще більші накладні витрати спричиняє стискання динамічних бібліотек. Для економії пам'яті сторінки, зайняті динамічною бібліотекою, спільно використовуються всіма процесами, що завантажили цю DLL. Але як тільки один із процесів намагається щось записати в пам'ять, зайняту DLL, система миттєво створює копію сторінки, що модифікується, і надає її в "монопольне" розпорядження процесу-“письменнику”. Оскільки розпа­кування динамічної бібліотеки відбувається в контексті процесу, що завантажив її, система змушена багаторазово дублювати всі сторінки пам'яті, виділені бібліотеці, фактично надаючи кожному процесору свій власний екземпляр DLL. Припустимо, одна DLL розміром у1 Мегабайт, була завантажена десятьма процесами–порахуємо,скільки пам'ятібуде дарма втра­чено, якщо вона стиснута!

Таким чином, під Windows 9x\NT стискати виконувані файли недоцільно–миплатимонабагато більше, ніжотримуємо. Що ж стосується захисту від дизассемблювання, то, коли ASPack тільки з'явився, він віднадив від зламу дуже багатьох некваліфікованих хакерів, але ненадовго.Сьогодні в мережілегко можназнайтипосібникизтак званого ручногозняттяASPack. Існує і маса готового інструментарію–від автоматичних распаковщиков до плагінів длядизасемблераIDA Pro, що дозволяють йому дизасемблювати стиснуті файли. Тому сподіватися, що ASPackцілком врятуєнашу програму від зламу,не слід.