Study: ComputerScience(CS)/CS: Linux

    [Linux] gdb로 디버깅하는 방법(feat. run/attach executable)

    💡 본 문서는 'gdb로 디버깅하는 방법'에 대해 정리해놓은 글입니다. 앞서 설명한 gdb에 대한 기본 설명을 읽고 오셨다면 gdb를 사용해야할 때에 대해서는 인지하셨을 거라 생각합니다. 이 문서 내에서는 활용하는 방법 중 먼저 run 방식과 attach 방식을 통해 gdb의 기능들을 살펴보고, 추후 load 방식에 대해 알아보겠습니다. 1. gdb를 익히기 위한 기본 세팅 1.1 C/C++ 파일 생성 매우 단순한 프로그램입니다. 2개의 입력인자를 받아 더하는 방식이네요. 이제 이 코드를 조금씩 분석해 나가며 기능들을 살펴보시죠. #include #include static int sum(int a, int b) { return a + b; } int main(int argc, char *argv[]) ..

    [Linux] gdb 활용하는 다양한 방법: executable, process, core dump file

    💡 본 문서는 'gdb 활용하는 다양한 방법'에 대해 정리해놓은 글입니다. C / C++ 코드를 디버깅 툴 중 가장 유명한 gdb와 이를 사용해야할 때에 대해 정리하였으니 참고하시기 바랍니다. 추가로 하기에 작성한 링크를 통해 이를 활용하여 executable, process, core dump file을 디버깅하여 분석하는 방법에 대한 글도 링크하였으니 참고하시기 바랍니다. 1. GDB란? 좋은 디버거는 문제를 해결하고, 프로그램을 좀 더 쉽게 개발하고 리버싱을 하는 등 다양한 방안에서 개발자에게 도움을 주는 도구 입니다. 많은 플랫폼에서 그에 맞춰 좋은 디버거들이 존재하고 개발자들은 자신에게 맞는 디버거를 사용하고 있습니다. 그 중 GDB(The GNU Debugger)는 많은 플랫폼, x86, x8..

    [Linux] 리눅스 크론탭(Linux Crontab) 사용법: 작업 스케줄러

    💡 본 문서는 '리눅스 크론탭(Linux Crontab) 사용법: 작업 스케줄러'에 대해 정리해놓은 글입니다. 윈도우에서는 스케줄러와 비슷하게 리눅스에서도 특정 시간에 특정 작업을 해야한다면 크론탭(Crontab)을 설정하여 사용하시면 됩니다. 이에 대해 정리하였으니 참고하시기 바랍니다. 1. 크론탭 기본 (crontab basic) 1.1 크론탭이란? crontab이란? 리눅스에서는 일반적으로 crons 데몬이 주기적인 작업 실행을 처리합니다. cron이 시작될 때부터 끝날 때까지 실행되며 cron 설정 파일은 cron table을 줄여서 crontab이라 부르게 됩니다. 1.2 크론탭 기본 사용 일단 기본이 되는 크론탭 사용법을 한 번 볼까요. 리눅스 쉘에서 다음처럼 입력합니다. $ crontab -..

    [Linux] gdb로 core dump 파일 디버깅하는 방법(feat. load core dump)

    💡 본 문서는 'gdb로 core dump 파일 분석하는 방법'에 대해 정리해놓은 글입니다. 열심히 키워놓은 프로그램이 어느 날 갑자기 죽거나 hang 걸리며 뻗어버리는 모습을 볼 때가 있습니다. 일반적으로 운영 로그/에러는 직접 logger를 만들어 따로 잘 저장해두겠지만 미처 고려하지 못한(생각보다 low한) 부분에선 바로 원인을 파악하기가 힘듭니다. 따라서 프로그램 실행 시 core dump를 남기게 설정한다면, 프로그램이 돌연사했을 때 특정 시점의 메모리 상태를 알 수 있어 이슈파악에 유용합니다. 이에 대한 설정 방법과 gdb를 이용한 디버깅 방법도 정리해두었으니 참고 부탁드립니다. 1. core 파일 다루기 core dump 파일은 ELF 형식(실행, 오브젝트, 공유라이브러리, '코어덤프'를 위..

    [Linux] 리눅스 시스템 디스크 파티션 및 관련 개념 정리

    💡 본 문서는 '리눅스 시스템 디스크 파티션 및 관련 개념'에 대해 정리해놓은 글입니다. 리눅스 시스템 관리에 있어 중요한 부분을 차지하는 디스크 파티셔닝 개념에 대해 다루겠습니다. 디스크 파티셔닝을 다루는 과정에서 필요한 용어들에 대해 알아보고, 특히 리눅스 시스템에 초점을 두었으니 참고부탁드립니다. 1. 파티셔닝 우선 파티셔닝은 하나의 물리 저장장치를 시스템 내부에서 여러 디스크 공간으로 나누는 작업을 일컫습니다. 이때 이 공간은 물리적으로 나뉠 수도 있고, 논리적으로 나뉠 수도 있습니다. 물리적으로 나뉜 공간을 프라이머리(Primary), 논리적으로 나뉜 공간을 익스텐디드(Extended)라고 부릅니다. 프라이머리 공간의 경우, 리눅스에서 최대 4개의 공간으로 나눌 수 있습니다. 따라서 더 많은 파..