크래시(컴퓨팅)

Crash (computing)
iMac에 커널 패닉이 표시된다.이것은 Unix 계열 시스템에서 운영체제 장애의 가장 일반적인 형태입니다.

컴퓨팅에서 크래시(crash) 또는 시스템 크래시는 소프트웨어 응용 프로그램이나 운영 체제 등의 컴퓨터 프로그램이 제대로 작동하지 않고 종료될 때 발생합니다.일부 운영 체제 또는 개별 응용 프로그램에서는 크래시 보고 서비스가 크래시 및 관련 세부 정보를 보고합니다(또는 사용자에게 보고할 수 있는 옵션을 제공). 보통 응용 프로그램 개발자에게 보고합니다.이 프로그램이 OS의 중요한 부분일 경우 시스템 전체가 크래시 또는 행업하여 커널 패닉 또는 치명적인 시스템 오류가 발생할 수 있습니다.

대부분의 크래시는 소프트웨어의 버그로 인해 발생합니다.일반적인 원인으로는 비활성 메모리주소 액세스, 프로그램카운터잘못된 주소값, 버퍼 오버플로, 이전 버그로 인해 영향을 받은 프로그램코드의 일부를 덮어쓰기, 잘못된 머신명령 실행(부정한 opcode), 처리되지 않은 예외 트리거 등이 있습니다.이 이벤트 체인을 시작한 원래 소프트웨어 버그는 보통 크래시의 원인으로 간주되며, 크래시는 디버깅 프로세스를 통해 크래시가 발생합니다.원래의 버그는, 실제로 크래시를 일으킨 코드로부터 멀리 떼어낼 수 있습니다.

초기 PC에서는 시스템의 메인 메모리 이외의 하드웨어 주소에 데이터를 쓰려고 하면 하드웨어가 손상될 수 있습니다.일부 크래시는 악용 가능하며 악의적인 프로그램 또는 해커가 임의 코드를 실행하여 일반적으로 액세스할 수 없는 바이러스 복제 또는 데이터 수집을 허용합니다.

응용 프로그램 크래시

Windows XP에서 메모리 읽기 액세스 위반으로 인해 충돌한 프로그램을 실행하는 프랑크푸르트 공항의 디스플레이

통상, operating system에 의해서 허가되지 않는 조작을 실행하면, 애플리케이션이 크래쉬 합니다.그런 다음 운영 체제가 응용 프로그램에서 예외 또는 신호를 트리거합니다.Unix 애플리케이션은 전통적으로 코어를 덤프함으로써 신호에 응답했습니다.대부분의 Windows 및 Unix GUI 응용 프로그램은 디버거가 설치되어 있는 경우 디버거를 연결할 수 있는 옵션이 있는 대화 상자(오른쪽에 표시된 대화 상자 등)를 표시하여 응답합니다.일부 응용 프로그램은 에러에서 복구하여 종료하지 않고 계속 실행하려고 합니다.

응용 프로그램에는 심각한 오류를 감지한 후 충돌하는[a] 코드가 포함될 수도 있습니다.

애플리케이션 크래시의 원인이 되는 일반적인 에러는 다음과 같습니다.

  • 해당 응용 프로그램에 의해 읽기 또는 쓰기에 할당되지 않은 메모리 읽기 또는 쓰기 시도(예: 분할 결함, x86 고유의 일반 보호 결함)
  • 권한 있는 명령 또는 잘못된 명령 실행을 시도합니다.
  • 액세스 권한이 없는 하드웨어 디바이스에서 I/O 작업을 수행하려고 합니다.
  • 시스템 콜에 비활성 인수 전달
  • 응용 프로그램에 액세스 권한이 없는 다른 시스템 리소스에 액세스하려고 시도
  • 잘못된 인수를 사용하여 머신명령어를 실행하려고 합니다(CPU 아키텍처에 따라 다름). 0으로 나누기, 데노멀 번호 또는 NaN(숫자가 아님) 값에 대한 연산, 정렬되지 않은 주소에 대한 메모리 액세스 등.

데스크톱으로 크래시

「데스크탑으로의 크래시」는, 프로그램(일반적으로 비디오 게임)이 예기치 않게 종료해, 유저가 데스크탑으로 돌아갔을 때에 발생하는 것을 말합니다.일반적으로 이 용어는 오류가 표시되지 않는 크래시에만 적용되므로 크래시의 결과로 사용자에게 표시되는 것은 데스크톱뿐입니다.대부분의 경우 데스크톱 크래시의 원인이 되는 명백한 액션이 없습니다.정상 작동 중에는 프로그램이 더 짧은 시간 동안 정지되었다가 저절로 닫힐 수 있습니다.또, 통상의 기능중에, 프로그램이 검은 화면이 되어, 데스크탑에 크래쉬 하기 전에 재생되고 있던 사운드의 마지막 몇초(데이터 버퍼의 사이즈에 따라서)를 반복해 재생하는 일이 있습니다.다른 경우 영역 로드와 같은 특정 작업에 의해 트리거된 것처럼 보일 수 있습니다.

데스크톱으로의 크래시는 사용자에게 특히 문제가 되는 것으로 간주됩니다.오류 메시지가 표시되지 않는 경우가 많기 때문에 문제의 원인을 추적하는 것은 매우 어려울 수 있습니다.특히 발생한 시간과 크래시 직전에 발생한 액션이 패턴이나 공통점을 가지고 있지 않은 것 같은 경우에는 더욱 그렇습니다.게임의 문제의 원인을 추적하는 한 가지 방법은 윈도우 모드로 실행하는 것입니다.Windows Vista 에는,[clarification needed] CTD 문제가 발생했을 때에, 그 원인을 추적할 수 있는 기능이 있습니다.Windows XP [clarification needed]에는, 같은 기능도 탑재되어 있습니다.

StepManiaBBC의 Bamzooki와 같은 일부 컴퓨터 프로그램도 전체 화면일 경우 데스크톱으로 크래시되지만 사용자가 데스크톱으로 돌아왔을 때 별도의 창에 오류가 표시됩니다.

웹 서버의 크래시

웹 사이트 뒤에서 웹 서버를 실행하는 소프트웨어가 크래쉬하여 웹 서버가 완전히 액세스할 수 없게 되거나 일반 콘텐츠가 아닌 오류 메시지만 표시될 수 있습니다.

예를 들어 사이트에서 스크립트(예: PHP)에 대해 SQL 데이터베이스(: MySQL)를 사용하고 있고 SQL 데이터베이스 서버가 크래시하면 PHP에 연결 오류가 표시됩니다.

운영 체제 크래시

Windows XP, Vista 및 7에 표시되는 죽음의 블루 스크린
OS X Mountain Lion에서 나타난 커널 패닉

일반적으로 OS 크래시는 처리할 수 없는 하드웨어 예외가 발생했을 때 발생합니다.운영체제 크래시는 운영체제 내부의 건전성 체크 로직이 운영체제 내부의 자기 정합성을 잃은 것을 검출했을 경우에도 발생할 수 있습니다.

Linux나 macOS같은 최신 멀티태스킹 운영체제는 일반적으로 애플리케이션 프로그램이 크래쉬해도 손상되지 않습니다.

z/OS일부 운영 체제에는 RAS(신뢰성, 가용성보수성) 기능이 있으며, OS는 하드웨어 장애(수정 불가능한 ECC 오류 등) 또는 소프트웨어 장애(미할당 페이지 참조 등)에 의해 중요한 컴포넌트의 크래시로부터 복구할 수 있습니다.

크래시의 보안 및 프라이버시 영향

애플리케이션에 따라서는, 크래시에 유저의 기밀 [1]정보나 개인 정보가 포함되는 일이 있습니다.게다가 크래시를 일으키는 많은 소프트웨어 버그는, 임의의 코드 실행이나 다른 종류의 권한 [2][3]상승에도 악용할 수 있습니다.예를 들어 스택 버퍼 오버플로는 서브루틴의 리턴 주소를 비활성 값으로 덮어쓸 수 있으며, 서브루틴이 반환될 때 분할 오류가 발생합니다.단, 부정 이용에 의해 반환 주소가 유효한 값으로 덮어쓰게 되면 해당 주소의 코드가 실행됩니다.

크래시 재현

크래시 리포터를 사용하여 현장에서 크래시를 수집하는 경우 개발자는 다음 단계로 크래시를 로컬로 재현할 수 있습니다.이를 위해 STAR는 심볼 [4]실행을 사용하고, MuCrash는 [5]충돌한 애플리케이션의 테스트 코드를 변환하며, EvoCrash는 진화 [6]검색을 수행합니다.

「 」를 참조해 주세요.

메모들

  1. ^ OS/360 이후에서는, 애플리케이션은 통상, 유저 완료 코드의 ABEND 매크로를 사용합니다.

레퍼런스

  1. ^ Satvat, Kiavash; Saxena, Nitesh (2018). "Crashing Privacy: An Autopsy of a Web Browser's Leaked Crash Reports". arXiv:1808.01718. Bibcode:2018arXiv180801718S. {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  2. ^ "Analyze Crashes to Find Security Vulnerabilities in Your Apps". Msdn.microsoft.com. 26 April 2007. Archived from the original on 11 December 2011. Retrieved 26 June 2014.
  3. ^ "Jesse Ruderman » Memory safety bugs in C++ code". Squarefree.com. 1 November 2006. Archived from the original on 11 December 2013. Retrieved 26 June 2014.
  4. ^ Chen, Ning; Kim, Sunghun (2015). "STAR: Stack Trace Based Automatic Crash Reproduction via Symbolic Execution". IEEE Transactions on Software Engineering. 41 (2): 198–220. doi:10.1109/TSE.2014.2363469. ISSN 0098-5589. S2CID 6299263.
  5. ^ Xuan, Jifeng; Xie, Xiaoyuan; Monperrus, Martin (2015). "Crash reproduction via test case mutation: let existing test cases help". Proceedings of the 2015 10th Joint Meeting on Foundations of Software Engineering - ESEC/FSE 2015 (PDF). pp. 910–913. doi:10.1145/2786805.2803206. ISBN 9781450336758. S2CID 10358523. Archived (PDF) from the original on 3 May 2019. Retrieved 15 February 2020.
  6. ^ Soltani, Mozhan; Panichella, Annibale; van Deursen, Arie (2017). "A Guided Genetic Algorithm for Automated Crash Reproduction". 2017 IEEE/ACM 39th International Conference on Software Engineering (ICSE). pp. 209–220. doi:10.1109/ICSE.2017.27. ISBN 978-1-5386-3868-2. S2CID 199514177. Archived from the original on 25 January 2022. Retrieved 21 December 2020.

외부 링크