본문 바로가기
INFRA/LINUX

core dump란

by 근현대사 2023. 6. 19.
반응형

core dump

컴퓨터 프로그램이 비정상적으로 종료될 때 그 시점의 메모리 상태를 기록한 파일을 말합니다. 이는 프로그램이 충돌했을 때의 상황을 분석하고 디버깅하는 데 도움이 됩니다.

코어 덤프는 프로그램의 메모리, CPU 레지스터, 스택 트레이스, 그리고 다른 시스템 상태 정보를 포함합니다. 이 정보를 통해 개발자는 프로그램이 충돌한 원인을 파악하고 문제를 해결할 수 있습니다.

코어 덤프는 일반적으로 바이너리 형식으로 저장되며, gdb와 같은 디버깅 도구를 사용하여 분석할 수 있습니다. 이 파일은 보통 크기가 크기 때문에, 디스크 공간을 많이 차지하거나 네트워크를 통해 전송하기 어려울 수 있습니다.

코어 덤프는 유용한 디버깅 도구이지만, 중요한 정보를 포함하고 있을 있으므로 보안에 주의해야 합니다. 예를 들어, 메모리에는 비밀번호, 개인 , 사용자 데이터 민감한 정보가 포함될 있습니다. 따라서 코어 덤프를 안전하게 관리하고, 필요하지 않은 경우에는 즉시 삭제하는 것이 중요합니다.

 

코어 파일 구조

코어 파일은 프로그램이 비정상적으로 종료될 때 그 시점의 메모리 상태를 기록한 파일입니다. 이 파일은 프로그램의 메모리 레이아웃, 레지스터 상태, 스택 트레이스, 그리고 다른 시스템 상태 정보를 포함합니다.

코어 파일의 구조는 운영 체제와 아키텍처에 따라 다르지만, 일반적으로 다음과 같은 섹션들을 포함합니다:

  1. 헤더: 코어 파일의 메타데이터를 포함하고 있습니다. 이는 코어 파일의 형식, 생성된 시스템의 아키텍처, 생성된 프로그램의 정보 등을 포함할 수 있습니다.
  2. 메모리 덤프: 프로그램의 메모리 레이아웃을 포함하고 있습니다. 이는 코드 섹션, 데이터 섹션, 힙, 스택 등을 포함할 수 있습니다. 각 섹션은 프로그램이 실행되는 동안 사용되는 메모리의 다른 부분을 나타냅니다.
  3. 레지스터 덤프: 프로그램의 CPU 레지스터 상태를 포함하고 있습니다. 이는 프로그램 카운터, 스택 포인터, 범용 레지스터, 상태 레지스터 등을 포함할 수 있습니다.
  4. 기타 정보: 프로그램의 상태에 대한 추가 정보를 포함할 수 있습니다. 이는 프로세스 ID, 시그널 정보, 열린 파일 디스크립터 등을 포함할 수 있습니다.

코어 파일은 바이너리 형식으로 저장되며, 일반적으로는 텍스트 에디터로 읽을 없습니다. 따라서 코어 파일을 분석하기 위해서는 GDB 같은 디버거나, objdump, readelf 같은 바이너리 분석 도구를 사용해야 합니다.

 

GDB사용 방법

리눅스에서는 file 명령을 사용하여 코어 파일에 대한 정보를 얻을 수 있습니다. 이 명령은 파일의 종류를 판별하고, 코어 파일인 경우 해당 코어 파일을 생성한 프로그램의 이름과 버전을 출력합니다.

예를 들어, core.12345라는 코어 파일이 있고, 파일을 생성한 프로그램의 이름을 알고 싶다면 다음과 같이 file 명령을 사용할 있습니다

 

file core.12345

 

명령을 실행하면 다음과 같은 출력을 있습니다:

 

core.12345: ELF 64-bit LSB core file x86-64, version 1 (SYSV), SVR4-style, from 'uyfuyfuy'

 

여기서 'uyfuyfuy'이 코어 파일을 생성한 프로그램의 이름입니다.

정보를 얻은 후에는 GDB 사용하여 코어 파일을 분석할 있습니다:

 

gdb uyfuyfuy core.12345

 

백트레이스 확인: backtrace 또는 bt 명령을 실행하여 스택 트레이스를 확인합니다. 명령은 프로그램이 비정상적으로 종료된 시점의 함수 호출 스택을 보여줍니다.

 

(gdb) backtrace 
or
(gdb) bt

 

변수 확인: print 또는 p 명령을 실행하여 변수의 값을 확인합니다. 예를 들어, print i 또는 print a[3] 같이 사용합니다.

(gdb) print i

 

소스 코드 확인: list 또는 l 명령을 실행하여 소스 코드를 확인합니다. 명령은 현재 실행 중인 함수의 주변 소스 코드를 보여줍니다.

(gdb) list

 

GDB 종료: quit 또는 q 명령을 실행하여 GDB 종료합니다.

(gdb) quit

반응형

'INFRA > LINUX' 카테고리의 다른 글

inode에 대하여  (0) 2023.06.21
리눅스 메모리에 대하여  (0) 2023.06.20
GPG key(PGP)  (2) 2023.06.16
udev란  (0) 2023.06.13
리눅스 명령어 모음1  (0) 2023.06.12