core dump
컴퓨터 프로그램이 비정상적으로 종료될 때 그 시점의 메모리 상태를 기록한 파일을 말합니다. 이는 프로그램이 충돌했을 때의 상황을 분석하고 디버깅하는 데 도움이 됩니다.
코어 덤프는 프로그램의 메모리, CPU 레지스터, 스택 트레이스, 그리고 다른 시스템 상태 정보를 포함합니다. 이 정보를 통해 개발자는 프로그램이 충돌한 원인을 파악하고 문제를 해결할 수 있습니다.
코어 덤프는 일반적으로 바이너리 형식으로 저장되며, gdb와 같은 디버깅 도구를 사용하여 분석할 수 있습니다. 이 파일은 보통 크기가 크기 때문에, 디스크 공간을 많이 차지하거나 네트워크를 통해 전송하기 어려울 수 있습니다.
코어 덤프는 유용한 디버깅 도구이지만, 중요한 정보를 포함하고 있을 수 있으므로 보안에 주의해야 합니다. 예를 들어, 메모리에는 비밀번호, 개인 키, 사용자 데이터 등 민감한 정보가 포함될 수 있습니다. 따라서 코어 덤프를 안전하게 관리하고, 필요하지 않은 경우에는 즉시 삭제하는 것이 중요합니다.
코어 파일 구조
코어 파일은 프로그램이 비정상적으로 종료될 때 그 시점의 메모리 상태를 기록한 파일입니다. 이 파일은 프로그램의 메모리 레이아웃, 레지스터 상태, 스택 트레이스, 그리고 다른 시스템 상태 정보를 포함합니다.
코어 파일의 구조는 운영 체제와 아키텍처에 따라 다르지만, 일반적으로 다음과 같은 섹션들을 포함합니다:
- 헤더: 코어 파일의 메타데이터를 포함하고 있습니다. 이는 코어 파일의 형식, 생성된 시스템의 아키텍처, 생성된 프로그램의 정보 등을 포함할 수 있습니다.
- 메모리 덤프: 프로그램의 메모리 레이아웃을 포함하고 있습니다. 이는 코드 섹션, 데이터 섹션, 힙, 스택 등을 포함할 수 있습니다. 각 섹션은 프로그램이 실행되는 동안 사용되는 메모리의 다른 부분을 나타냅니다.
- 레지스터 덤프: 프로그램의 CPU 레지스터 상태를 포함하고 있습니다. 이는 프로그램 카운터, 스택 포인터, 범용 레지스터, 상태 레지스터 등을 포함할 수 있습니다.
- 기타 정보: 프로그램의 상태에 대한 추가 정보를 포함할 수 있습니다. 이는 프로세스 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 |