Креш

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Відмова системи у iMac
Відмова системи у iMac
Відмова системи у Windows, так званий синій екран смерті

Креш (англ. crash) або відмова системи (також аварійна відмова[1][2], фатальний збій[2], аварія[3][2], розм. крах, падіння) — серйозний баг, помилка у програмі, що викликає аварійне завершення програми або операційної системи, коли вона перестає функціонувати належним чином.

Часто помилка такого роду призводить до виходу з ураженої програми. Програма може не відповідати, доки служба звітності аварії не повідомить подробиці відмови. Якщо програма є критичною частиною операційної системи, вся система може аварійно завершити роботу або зависнути, що часто призводить до поломки ядра або фатальної системної помилки.

Більшість відмов з'являється внаслідок виконання недопустимих машинних інструкцій. Наприклад, коли певний об'єкт був видалений (або переміщений), а значення вказівника не було змінено на нульове, тому він все ще вказує на область пам'яті, де знаходився цей об'єкт і може мати до нього доступ; або в результаті переповнення буфера перезаписуються інші дані що знаходяться поруч з буфером, які може бути пошкоджено[4] а інтерпретація інформації як виконуючого коду порушена[5]. Подібні помилки призводять до порушення безпеки доступу до пам'яті, та виконання обробки винятків.

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

Відмова програми[ред. | ред. код]

Крах програми в аеропорті у результаті помилки сегментації

Програмний додаток зазвичай завершує свою роботу у випадку виконання операції, що не дозволена операційною системою. Тому після такої спроби система запускає в додатку обробку винятків або сигнал.

Unix додатки традиційно відповідають на сигнал за допомогою дампа пам'яті[en]. Більшість Windows та Unix додатків з графічним інтерфейсом користувача відповідають відображаючи діалогове вікно з можливістю підключення налагоджувача, якщо він встановлений.

Деякі додатки намагаються відновитись після помилки та продовжити роботу замість повного завершення.

Типові помилки, що призводять до збою в додатках, містять:

Відмова Web-сервера[ред. | ред. код]

Додаток, запущений у вебсервері, може відмовити, що викличе повну недієздатність сайту або роботу в режимі сповіщення повідомлення про помилку.

Наприклад, якщо сайт, що використовує базу даних SQL (наприклад MySQL) використає скрипт (наприклад на PHP), і цей сервер бази даних відмовить, то PHP видасть повідомлення про помилку підключення.

Наслідки аварій в безпеці даних[ред. | ред. код]

Багато програмних помилок, що спричинюють відмову системи, також використовуються як експлойти для виконання довільного коду[en] та інших видів підвищення привілеїв.[6][7] Наприклад, переповнення стекового буфера може перезаписати адресу повернення підпрограми з недійсним значенням, що призводить до помилки сегментації, коли підпрограма поверне значення. Однак, якщо експлойт перезаписує адресу повернення дійсним значенням, то код у цій адресі буде виконано.

Див. також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Першиков. Толковый словарь по информатике. — 1991. — С. 245.
  2. а б в Орлов. Англо-русский словарь по вычислительной технике и информационным технологиям. — 4-е изд. — 2009. — ISBN 5-93037-124-5.
  3. Толковый словарь по вычислительной технике. — Microsof Press, 1995. — С. 107. — ISBN 5750200086.
  4. Джон Эриксон. Хакинг. Искусство эксплойта. — СПб. : Символ-Плюс, 2010. — С. 139. — ISBN 978-5-93286-158-5.
  5. Джон Эриксон. Хакинг. Искусство эксплойта. — СПб. : Символ-Плюс, 2010. — С. 142. — ISBN 978-5-93286-158-5.
  6. Analyze Crashes to Find Security Vulnerabilities in Your Apps. Msdn.microsoft.com. 26 квітня 2007. Архів оригіналу за 11 грудня 2011. Процитовано 26 червня 2014.
  7. Jesse Ruderman » Memory safety bugs in C++ code. Squarefree.com. 1 листопада 2006. Архів оригіналу за 11 грудня 2013. Процитовано 26 червня 2014.

Література[ред. | ред. код]

Посилання[ред. | ред. код]