WSL과 VS Code를 사용해 C 언어 소스 코드 작성, 실행 이후 Git 사용까지(Linux, GCC, Git, feat. Stackguard)

진성·2022년 9월 27일
1
post-thumbnail

1. WSL 설치 (옛날 일)

  1. WSL은 진짜 훌륭하다. VM 없이도 그냥 Windows로 편하게 Linux OS를 사용하게 해준다니. Nomad Coder 개발환경 셋업 강의과 Microsoft의 안내 페이지를 참고하여 WSL을 설치했었다. 후자가 더 최신의 방법이므로(Microsoft 자체 문서이기도 하고), 이쪽 방식을 따라 했다.

  2. Powershell을 열고 wsl --install 설치를 해준다.

  3. 기본적으로 Ubuntu 배포가 설치되는데, 현재 수강중인 소프트웨어 보안 수업에서는 Ubuntu 16.04 LTS 배포를 사용하므로, wsl --install -d Ubuntu-16.04를 통해 설치해줬다. 이후 기본으로 사용하는 배포판 설정을 위해 wsl --set-default Ubuntu-16.04까지 해주면 WSL이 자동적으로 해당 버젼으로 부팅(?)된다.

  4. 처음 들어가면 User id와 password를 설정해야한다. 했다. WSL 1.0과 2.0이 있는데 2.0이 더 최신이고 여러모로 좋다고 한다(...). 내가 설치할 때 기준으로는 default가 2.0이었는데 wsl --set-version <DistributionName> <Version[1 or 2]>로 설정이 가능하다.


2. VScode 설치 (옛날 일)

  1. VScode는 그냥 홈페이지서 잘 받았다. 까다로울 건... 없었다.

  2. VScode는 멋쟁이다. Extension을 설치하면 내가 강해지는 기분이 든다. 어떤 Extension을 쓰는지는 매우 중요하다! 그냥 필수적인 경우도 있고, 생산성이 확 느는 경우도 있고.

  3. 나는 내가 좋아하는 GitLens를 받았고, Python 관련 Extension도 받았다. 작년 말 Boostcourse에서 사용했던 환경들이다.

  4. C를 사용할 거니까 C/C++ Extension도 설치.

  5. GCC for Windows도 설치할 필요가 있기에 옛날(1주전)에 설치했다. 소스코드를 컴파일해줄 소중한 Compiler이다. 근데 사실 Linux 환경서 개발할거라 그렇게 크게 필요는 없었던 것 같다. 근데 설치만 한다고 되는 것은 아니고, PATH에 추가도 해줘야한다. 여기 선생님의 을 참고하였다. 근데 하튼 잘 안쓸 듯 하다. 앞으로 Linux로 할거니까.


3. GCC, G++, GDB 설치 (오늘 일)

  1. GCC와 G++은 C/C++ 소스코드를 컴퓨터가 실행할 수 있게끔 Binary(Assembly와 일대일 매핑된다) Code로 Compile을 해주는 컴파일러다. C Code를 Linux 환경에서 실행할 수 있게끔 Compile을 해줘야 하므로, 꼭 필요하다!

  2. Linux의 신 sudo(superuser do) 명령어를 통해 Package를 받았다. 권한 확인을 위해 처음 Linux에 설정한 비밀번호를 입력해줘야 한다. Package를 받기 위해선 다운 받을 수 있는 패키지의 index 및 정보를 update해야하므로 받아온 후 설치한다 이는 다음과 같다. 중간의 -Y option은 [Y/N]을 사전에 답해주는 Option이다. 참고한 Link는 여기.

$ sudo apt-get update
$ sudo apt-get -Y install gcc
  1. GDB는 Debugger로, Security 수업에서는 Low Level Memory에서 일어나는 일이나 주소 등을 쉽게 확인할 수 있어 있으면 좋다. G++과 함께 설치가 가능하다. WSL이 아니라 설치된 Linux Machine에서 해야한다. Win 키 누르고 Ubuntu 16.04로 들어가 하면 된다. sudo apt-get install build-essential gdb 참고한 문서는 visualstudio 공식 문서인데, 이것이 다음 Step인 WSL과 VSCode 연결하기까지 함께 다뤄주는 소중한 문서이다. Microsoft 문서는 신이고 무적이다.


4. WSL과 VScode 연결하기 (당연히 오늘 일)

  1. 다시 이야기하지만 이 문서대로 하면 된다. 다만 나는 C 코드여서 gcc를 사용했다.

  2. WSL-Remote extension이 VScode에 깔려있어야 한다. WSL 설치하면서 그냥 받아진 것 같기도. 잘 받아져있었다.

  3. 시키는대로 착하게 따라서 WSL로 Project 경로를 만들었다. 그리고 code . 하면 끝... Microsoft는 신이고 무적이다.

$ cd
$ mkdir project
$ cd project
$ mkdir stackguard
$ cd stackguard
$ code .
  1. 바로 Remote - WSL 환경으로 넘어간다.

  2. 이미 소스코드를 작성한 완성본 기준으로 한거라 Code가 있다. 그냥 평범하게 Windows서 하듯이 하면 되는데 이미 Linux인 거시다... 진짜 WSL 너무 편한 것 아닌가.


5. 소스코드 작성, 컴파일, 실행 (마지막이라 생각했다)

  1. Stackguard.c는 Stack Canary라고도 불리우는, Stack Buffer Overflow를 감지하기 위한 코드를 Toy Example로 만든 소스코드이다.

  2. 코드와 Buffer Overflow는 별도의 글로 작성하는게 맞다고 생각했다. 잘 해냈다고 치고 컴파일을 한다.

  3. gcc -o stackguard -fno-stack-protector stackguard.c -o stackguard는 compile 된 output binary file의 파일 명 지정이다. Stack을 Overflow해야하고, GCC에는 내가 짠 StackGuard(Overflow 방지 코드) 코드가 컴파일 타임에 자동적으로 추가된다. 이를 끄기 위해 -fno-stack-protector 옵션을 추가해서 compile 했다.

  4. ./stackguard <argument>를 통해 컴파일된 코드를 실행하고, 제대로 작동하는 것을 확인했다.

  5. 이제 끝! 이라고 생각했는데 생각해보니 코드를 짜고 일을 했으면 Github에 올려 두는 것이 응당 옳다.


6. Linux 환경과 Git 연동하기 (마지막)

  1. 일단 Git을 설치했다. sudo apt-get install git

  2. 일단 git init으로 git project 형태로 만든 후 commit하고 push해보려 했다. 안되길래 명령어 대충 보면서 해보다가 SSH Key 등록이 안되어있다고 걸렸다. SSH key 어케 만들고 어케 등록하는데?

  3. 근데 이제 어떡함? 신은 존재했다. 바로 여기에.

  4. $ ssh-keygen -t ed25519 -C "myemail"로 나도 멋진 key 하나 장만했다. /.ssh 경로에 생긴 public key를 복사해서 Github 설정에서 SSH key를 추가해주면 된다.

  5. 그 후 ~/.ssh 에 config 파일을 추가해서 아래 내용을 적어준다. 이를 통해 접속 테스트를 할 수 있다. 아마 Linux좀 치면 vim 같은거 썼겠지만 나는 초심자니까 code . 해서 비겁하게 VScode로 추가했다. ssh -T git@github.com 해서 나한테 인사해주면 된 거다.

  6. Github에 Repo를 만들면, SSH로 어떻게 Push 하는지 친절히 나와있다.

$ git init #현 디렉토리를 git repo로 만들어준다.
$ git remote add origin git@github.com:jskwak98/Stackguard.git
$ git branch -M main
$ git push -u origin main
  1. 근데 remote add 부분에서 fatal: remote origin already exists. 에러가 났다. 2번에서 이것저것 하며 remote origin이 생겨버린 것. git remote rm origin으로 없애준다. 그러면 드디어 정상적으로 Push가 된다. 진짜 감격이야! 개발환경 설정하면 별거 안해도 두근거려!


7. 마무리

  1. VScode와 WSL, 알맞은 Ubuntu 배포판을 설치하고, 이들을 각자 연결해준 후, C로 코딩이 가능한 환경을 만들어줬다. 같이 연결도 해주고, Github과 연동도 해줬다. 이제 남은 건 진짜 코딩뿐이야!

  2. 오늘 사용한 코드는 https://github.com/jskwak98/Stackguard 에 올려뒀다. 해당 코드와 Buffer Overflow에 대해 아마(?) 다룰지도 아닐지도.

profile
어려운 건 꾸준히, 재밌는 건 빠르게

0개의 댓글