코어 덤프

컴퓨팅에서, 코어 덤프(), 메모리 덤프(), 또는 시스템 덤프(), ABEND 덤프는 컴퓨터 프로그램이 특정 시점에 작업 중이던 메모리 상태를 기록한 것으로, 보통 프로그램이 비정상적으로 종료했을 때 만들어진다. 실제로는, 그 외에 중요한 프로그램 상태도 같이 기록되곤 하는데, 프로그램 카운터, 스택 포인터 등 CPU 레지스터나, 메모리 관리 정보, 그 외 프로세서 및 운영 체제 플래그 및 정보 등이 포함된다. 코어 덤프는 프로그램 오류 진단과 디버깅에 쓰인다.
이 명칭은 1950년대부터 1970년대 랜덤 액세스 메모리로 주로 쓰던 자기 코어 메모리에서 유래했다. 자기 코어 기술은 더 이상 쓰이지 않지만 그 명칭은 계속 쓰이고 있는 것이다.
많은 운영 체제는 프로그램에 치명적인 오류가 일어나면 자동으로 코어 덤프를 실행시키는데, 이를 "코어를 덤프한다"고 한다. 이 말의 의미가 확장되어, 많은 경우에 프로그램 메모리의 기록이 발생하는지 여부에 관계없이 생기는 치명적인 오류를 의미하게 되었다.

배경 
"코어 덤프", "메모리 덤프" 또는 그냥 "덤프"라고도 하는 이 용어는 추가적인 검사를 위해 많은 양의 원시 데이터를 저장하는 것을 나타내는 전문 용어가 되었다.디스크 운영 체제와 대용량 데이터 파일을 기록할 수 있는 기술이 등장하기 전까지, 코어 덤프는 일반적으로 8진수 또는 16진수("16진수 덤프")가 열로 나열된 종이로 출력되었다. 때로는 그 해석이 기계 명령어, 텍스트 문자열 또는 10진수나 부동소수점 숫자로 함께 출력되기도 했다. (디스어셈블러 참조).
최신 운영 체제에서 "코어 덤프"는 프로세서 레지스터 값과 같은 다른 정보와 함께, 특정 프로세스의 메모리 이미지, 또는 해당 프로세스 주소 공간의 부분적 메모리 이미지를 지닌 파일이다. 이러한 파일은 텍스트로 인쇄하거나 볼 수 있고, 또는 objdump와 같은 전문 툴을 사용하여 분석할 수 있다.
근래의 코어 덤프 파일 및 오류 메시지는 일반적으로 16진수 인코딩을 쓰는데 16진수가 10진수나 8진수 표현보다 프로그래머에게 더 익숙하기 때문이다.

코어 덤프의 사용
코어 덤프는 다양한 상황에서 디버깅에 유용한 보조 역할을 한다. 초기의 독립형 또는 일괄 처리 시스템에서, 사용자는 코어 덤프 덕분에 컴퓨터 시설을 독차지하지 않고도 디버깅할 수 있었다. 출력을 하는 것 또한 스위치와 조명을 사용해 디버깅하는 것보다 더 편리했다.
공유 컴퓨터에서 코어 덤프는 시분할이나 일괄 처리, 서버 시스템에서도 시스템이 바로 다시 작동할 수 있도록 운영 체제의 오프라인 디버깅을 가능하게 한다.
사용자는 코어 덤프를 통하여 차후 분석이나 오프사이트 분석을 하기 위해, 또는 다른 충돌과 비교하기 위해서 충돌을 저장할 수 있다. 내장형 컴퓨터의 경우, 컴퓨터 자체에서 디버깅을 지원하는 것이 비실용적일 수 있기 때문에 덤프 분석을 다른 컴퓨터에서 실행하기도 한다. 유닉스 초기 버전과 같은 일부 운영 체제에서는 실행중인 프로세스에 디버거가 붙는 것을 지원하지 않았기 때문에 프로세스의 메모리 내용에 디버거를 실행하는 데 코어 덤프가 필요했다.
코어 덤프는 동적 메모리 할당 시 사용되지 않는 데이터를 캡처하는데 사용되므로 더 이상 실행되지 않는 프로그램에서 정보를 회수하는데 쓰인다. 상호적 디버거가 없을 때에는, 꼼꼼한 프로그래머가 직접 검사로 오류를 판별하는 데 코어 덤프를 사용할 수 있다.

분석
코어 덤프는 덤프 프로세스 주소 공간의 덤프 영역의 모든 내용을 나타낸다.운영 체제에 따라, 덤프는 메모리 영역의 해석을 돕기 위한 여러 데이터 구조를 가질 수도 있다. 이러한 시스템에서 성공적인 해석을 위해서는 덤프를 해석하려는 프로그램 또는 사용자가 프로그램 메모리 사용의 구조를 이해해야한다.
디버거는 기호 테이블로 기호적으로 변수를 확인하고 소스 코드를 보여줌으로써 프로그래머의 덤프 해석을 돕는다. 기호 테이블을 사용할 수 없는 경우에는 전적인 덤프 해석이 이뤄지지 않더라도, 문제의 원인은 충분히 파악할 수 있다. 덤프 분석기란 덤프를 분석하는데 쓰이는 특수 목적의 도구이다. 그 중에서도 GNU binutils' objdump같은 도구가 대중적으로 사용되는데, 많은 운영 체제에서 사용이 가능하기 때문이다.
새로운 현대의 유사 유닉스 운영 체제에서 관리자와 프로그래머는 이 라이브러리를 사용하는 GNU Binutil 바이너리 파일 디스크립터 라이브러리(BFD)와 GNU 디버거(GDB), 그리고  objdump로 코어 덤프 파일을 읽는다. 이 라이브러리는 코어 덤프의 메모리 영역에서 주어진 주소에 대한 원시 데이터를 제공한다. 이것은 그 메모리 영역의 변수나 데이터 구조를 인식하지 못하기 때문에 코어 덤프를 읽을 때 라이브러리를 사용하는 응용 프로그램이 변수의 주소와 데이터 구조 자체의 레이아웃을 결정해야 한다. 디버깅 중인 프로그램 때문에 기호 테이블을 사용하는 것이 그 예이다.
리눅스 시스템 충돌 덤프의 분석가들은 kdump나 리눅스 커널 충돌 덤프(LKCD)를 사용할 수 있다.
코어 덤프는 추후 복귀를 위해 주어진 상태에서의 프로세스 상황 정보(상태)를 저장한다. 시스템은 프로세서들 간의 코어를 전송하여 가용성을 높일 수 있는데, 때때로 코어 덤프 파일 자체를 통해 전송하기도 한다.
코어는 네트워크를 통해 원격 호스트에 덤프될 수도 있다. (보안상 위험)

각주

외부 링크 
파일 형식에 대한 설명:

 
 
 
 
 
 
 
 Enabling core dumps in embedded systems  - An article from the Real-Time embedded blog
 Minidump Files.

커널 코어 덤프:

 Apple Technical Note TN2118: Kernel Core Dumps

컴퓨터 오류
디버깅