CTF[6일차]

정지범·2024년 12월 11일
0

CTF

목록 보기
6/9
참고
※참고 자료는 드림핵을 이용하였습니다.
※드림핵의 로드맵대로 공부할 예정입니다.
※스스로를 위해 정리한 참고 자료입니다.

ㅁ C코드 작성

VS code로 기본적인 C 코드를 작성해 보겠습니다.

  • 다음 코드는 “Hello Beginners!”를 출력하고 종료하는 C 코드입니다.
#include <stdio.h>

int main(){
	printf("Hello Beginners!\n");
    return 0;
}

ㅇ VS code를 열고 리눅스에 원격 접속한 뒤, 아래와 같이 Desktop 디렉토리에 test.c 파일을 생성합니다.

ㅇ 아래와 같이 test.c 파일에 위에서 소개한 C 코드를 작성하고 저장합니다.

ㅇ C 코드 컴파일, 실행

소스 코드가 포함된 c 파일은 컴파일 과정을 거쳐야 실행 가능한 파일로 변환됩니다.

  • 리눅스에서 C/C++ 언어로 작성된 소스 코드를 컴파일할 때는 주로 gcc 컴파일러를 사용합니다.

  • 리눅스 터미널에 gcc --version을 입력하여 다음과 같이 버전이 출력되는지 확인합니다.(버전 숫자는 달라도 괜찮습니다!)
user@LAPTOP-FM1BL380:~$ gcc --version
gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • 버전이 뜨지 않으면 아래 명령어를 통해 gcc를 설치합니다.
sudo apt install gcc
  • 설치가 완료되면 test.c 파일이 있는 디렉토리로 이동하고 컴파일합니다.
  • 아래는 test.c 파일을 실행 가능한 test 파일로 컴파일하는 명령어입니다.
  • 컴파일 후에 ./test 명령으로 test 파일을 실행하면 “Hello Beginners!”가 출력됩니다.
gcc -o test test.c

VS code로 C 코드 실행

VS code의 C/C++ 확장 프로그램을 사용하면, gcc 명령어를 직접 사용해서 컴파일 하지 않아도 메뉴를 통해 컴파일하여 실행할 수 있습니다.

  1. VS code를 열고 좌측 탭의 Extensions를 클릭하여 C/C++을 Install 합니다.
  2. 다음으로 상단 메뉴에서 Run - Run Without Debugging 혹은 단축키 Ctrl+f5로 코드를 실행합니다. 그러면 VS code에서 자동으로 소스 코드를 컴파일하고 실행 파일을 생성하여 실행합니다.
  3. **아래 스크린샷은 실행 결과입니다.
  • VS code로 코드를 실행하면 더 편리하지만, 때에 따라 VS code를 사용할 수 없는 경우도 있으니 앞서 보았던 gcc 컴파일을 기본적으로 알아 두면 좋습니다.

디버깅

에러 해결

소스 코드의 문법이 잘못되었거나 비정상적인 코드를 작성한 경우 컴파일 혹은 실행 과정에서 에러가 발생합니다.
아래의 그림은 에러가 발생하는 예시 코드입니다.

  • VS code에서 코드를 실행하면 터미널 창에 에러 메시지가 출력됩니다.
  • 이처럼 코드에 에러가 발생한 경우, 출력된 에러 메시지를 활용해서 어느 부분이 잘못되었는지 알아내고 수정하여 에러를 해결할 수 있어야 합니다.

터미널 창을 보면 에러가 발생한 이유는 error: 'sum' undeclared (first use in this function)이고, 에러가 발생한 코드는 11번 라인의 sum=a+b;입니다. 에러 메시지를 통해 sum 변수가 선언되지 않아서 에러가 발생했다는 것을 알 수 있고, 이에 따라 11번 라인 이전에 int sum=0;을 추가하면 에러가 발생하지 않습니다.

해당 에러는 수정하기 쉬운 예시이지만, 에러 메시지를 봐도 어떤 에러인지, 어떻게 해결하는지 알기 어려운 경우가 많습니다. 이런 경우 구글링을 통해 사람들이 비슷한 에러를 어떻게 처리했는지 참고하는 것도 좋은 방법입니다.

아래 그림의 에러 메시지 undeclared (first use in this function)를 구글에 검색해 보면 동일한 에러를 겪은 사람의 게시글이 가장 먼저 뜹니다. 해당 게시글에 달린 여러 사람들의 답변을 보고, 에러를 해결하려면 변수를 선언해야 한다는 사실을 알아낼 수 있습니다.

디버깅

에러 해결에 도움이 되는 또 다른 방법으로 디버깅이 있습니다.

  • 디버깅(Debugging)은 소스 코드의 오류(버그)를 찾고 수정하는 과정을 말합니다. 코드를 검사하여 잘못된 부분을 찾거나, 특정 코드를 수행한 결과를 확인하기 위해 사용합니다.
  • VS code에서 제공하는 디버깅 기능을 살펴 보겠습니다.
  • 상단 메뉴의 Run - Start Bebugging 혹은 단축키 F5로 디버깅을 시작할 수 있습니다.

    Breakpoint
    주로 확인하고 싶은 코드에 Breakpoint(중단점)를 설정한 뒤 디버깅을 시작합니다. 중단점을 설정하면 해당 코드를 실행하기 직전에 프로그램을 중단하여 그 시점의 변수 값이나 콜 스택 정보 등을 확인할 수 있습니다. 중단점은 코드 줄 번호 왼쪽을 클릭하거나 코드에 커서를 두고 단축키 f9를 클릭하여 설정합니다.

Debug View
디버깅을 시작하면 좌측 Debug View에서 VARIABLES(변수), WATCH(변수 또는 표현식의 결과), CALL STACK(호출한 함수), BREAKPOINTS(사용자가 설정한 중단점 목록) 등의 정보를 확인할 수 있습니다.

Debug Toolbar
디버깅 툴바의 각 버튼은 순서대로 다음과 같은 기능을 합니다.

  • ⏯️ Continue/Pause : 다음 중단점을 만날 때까지 프로그램 실행 혹은 프로그램 중단 (f5)
  • ➡️ Step Over : 코드 한 줄 실행 - 함수를 만나면 함수 실행 (f10)
  • ⬇️ Step Into : 코드 한 줄 실행 - 함수를 만나면 함수 내부로 이동하여 한 줄 실행 (f11)
  • ⬆️ Step Out : 함수의 나머지 부분을 모두 실행 (Shift+f11)
  • 🔄️ Restart : 디버깅 재시작 (Ctrl+Shift+f5)
  • ⏹️ Stop : 디버깅 종료 (Shift+f5)

Debug Console

  • 디버깅 결과를 출력하는 콘솔 창입니다.

Vim

  • Vim(Vi IMproved)은 UNIX의 Vi 편집기(Visual editor)의 기능을 개선한 버전의 텍스트 편집기로, Linux, macOS, BSD 등 UNIX 기반의 모든 환경에서 사용할 수 있습니다.
  • 마우스 없이 키보드 입력만으로 모든 작업이 가능하기 때문에 Vim 사용에 익숙해지면 소스 코드를 매우 빠르고 효율적으로 편집할 수 있습니다.
  • 리눅스 환경에서는 Vim 편집기 사용법을 알아 두면 편리합니다. 물론 꼭 알아야 하는 것은 아니지만, 다른 편집기를 사용할 수 없는 경우를 대비하여 익혀두는 것도 좋습니다.
  • 우분투 리눅스에는 Vim이 기본적으로 설치되어 있는 경우도 있으나 만약 없다면 터미널에서 sudo apt install vim 명령을 실행하여 설치합니다.

Vim 사용법

Vim 실행

vi 명령을 입력하면 아래와 같이 Vim이 실행됩니다.

vi 파일명은 기존 파일을 수정하거나 새 파일을 생성합니다. 아래는 vi a.txt 명령으로 a.txt 파일을 연 모습입니다.

Vim 사용법 - 모드 1

모드

  • Vim의 3가지 모드와 각 모드에서 자주 사용하는 명령을 소개하겠습니다.

Normal Mode (일반 모드)

  • Vim을 처음 실행하면 일반 모드로 시작합니다.
  • 다른 모드에서 esc 키를 클릭하면 일반 모드로 전환됩니다.
  • 일반 모드에서는 방향 키와 Home, End 등의 키를 통해 커서를 이동할 수 있는데, 다른 키로도 동일한 동작을 수행할 수 있습니다.
  • 커서이동내용
    gg첫 행으로 이동
    k위로 이동
    0행의 처음으로 이동
    h왼쪽으로 이동
    l오른쪽으로 이동
    $행의 끝으로 이동
    G마지막 행으로 이동
    j아래로 이동
  • 삭제,복사,붙여넣기내용
    x현재 커서가 위치한 글자 삭제(del)
    X현재 커서 앞 글자 삭제(backspace)
    dd현재 커서가 위치한 행 삭제
    yy현재 커서가 위치한 행 복사
    p복사한 내용을 현재 행 이후에 붙여넣기
    P복사한 내용을 현재 행 이전에 붙여넣기
  • 문자열 찾기내용
    /문자열,enter현재 커서 이후로 문자열 찾기
    n찾은 문자열 목록에서 다음 문자로 이동
  • 되돌리기내용
    u이전 수정 사항 되돌리기

Vim 사용법 - 모드 2

Insert Mode (입력 모드)

  • 입력 모드는 사용자가 실제로 텍스트를 입력하고 편집하는 작업을 수행합니다.
  • 입력 모드에서도 방향키를 사용할 수 있으며, 일반 텍스트 편집기와 유사하게 동작합니다.
  • 일반 모드에서 아래 명령 키들을 클릭하면 입력 모드로 전환됩니다.
입력 모드 명령 키내용
o현재 커서 다음 줄에 입력
O현재 커서 이전 줄에 입력
i현재 커서 위치에 입력
I현재 커서가 위치한 행의 처음에 입력
s현재 커서 한 글자 지우고 입력
S현재 커서 한 줄 지우고 입력
a현재 커서 다음 칸에 입력
A현재 커서가 위치한 행의 마지막에 입력

Vim 사용법 - 모드 3

Command Mode (명령 모드)

  • 명령 모드는 저장, 종료, 취소 등의 명령을 수행합니다. 일반 모드에서 :를 입력하면 명령 모드로 전환됩니다. 이후 원하는 명령을 입력하면 됩니다.
명령 모드 명령어내용
:w저장
:q종료
:i취소
:wq저장하고 종료
:q!저장하지 않고 종료
:%s/문자열1/문자열2/g전체에서 문자열1을 모두 찾아 문자열2로 치환



출처 및 참고문헌

https://learn.dreamhack.io/449#21

profile
안녕하세요

0개의 댓글