웬 디 [1187082] · MS 2022 (수정됨) · 쪽지

2023-12-21 22:03:43
조회수 4,359

정보) 컴퓨터공학과 과목 맛보기 - 2. 시스템프로그래밍(2)

게시글 주소: https://1ff8ipsi.orbi.kr/00066048002

자 이전 글과 같이 비트로 몇 주 동안 씨름을 하다보면 

어셈블리어(Assembly)가 여러분을 맞이합니다! 산 넘어 산


어셈블리어가 뭐냐? 라고 물으시면

우리가 많이 쓰는 C, 자바 등의 언어는 대부 고급 언어입니다.

이를 사용하는 사람은 C 코드가 무슨 뜻인지 읽을 수 있지만,

컴퓨터에게는 그냥 텍스트 쪼가리일 뿐이에요.

그럼 이 코드를 컴퓨터가 알아먹을 수 있게 바꿔주는 과정이 필요하겠죠?

C 코드는 전처리기, 컴파일러, 어셈블러, 링커를 거쳐 컴퓨터가 읽을 수 있는 프로그램이 됩니다.


근데 왜 이 중에 어셈블리어냐? 이것도 이유가 있죠.

어셈블리어는 기계어와 일대일 대응이 되는 저급 언어로,

이 단계는 사람이 어느 정도 읽고 해석할 수가 있기 때문이죠!

(이 이후는 10100101010111... 과 같은 진짜 그냥 비트입니다.)

컴퓨터가 우리가 쓴 코드를 자기가 알아 먹을 수 있는 코드로 어떻게 바꾸는 지를 보기 위해서 배우는 겁니다.


예시 몇 개를 보여드리겠습니다.


1. 간단한 swap 함수


2. 간단한 비교 함수


3. 간단한 재귀 함수


이렇게 나머지 반 학기 동안 어셈블리어와 씨름을 합니다.

C언어를 어셈블리어로, 어셈블리어를 C언어로 왔다갔다할 수 있는 능력이 생깁니다.


-------------------------------------------


저는 이 과목 들으면서 이론보다는 과제가 더 재밌었는데요.

교수님이 보안랩을 운영하셔서 그런지 해킹을 찍먹해볼 수 있는 과제를 주셨었습니다.

리버스 엔지니어링이라고 부르는데요,

남이 만들어 놓은 프로그램의 결과만을 보고 코드를 역으로 유추하는 걸 말합니다.


Bomblab이라고 말 그대로 폭탄을 해체하는 과제였는데요..

이건 위에서 배운 어셈블리어를 이용하는 과제입니다.


과제에서는 이미 기계어로 번역돼 코드를 읽을 수 없는 프로그램만 주어집니다.

디버거를 이용하면 기계어 프로그램을 어셈블리어로 바꿀 수 있는데요.

이 어셈블리어로 번역된 것만을 가지고 원래 C 코드가 어떤 코드였을지 유추하여

각 스테이지마다 폭탄 해제에 맞는 답이 무엇인지 알아가는 과제입니다.

답이 틀려서 폭탄이 터지면 감점!


위는 제가 냈던 답안 중 일부인데, 페이즈2라서 이건 쉬운 편입니다.

점화식이라 오르비언들이 이해가 편하겠군요.


페이즈5인데, 무슨 소리인가 싶죠..? ㅋㅋㅋ


페이즈 6개 + 히든 페이즈 1개 = 총 7개의 퀴즈를 풀어내는 과제였습니다.

#1이 1등이라는 뜻이었나..? 기억은 잘 안 나지만 빨리 풀긴 했었습니다.



-------------------------------------------


이걸 보시면 느끼시겠지만.. 

프로그래밍 수업 과제는 이게 도대체 언제 끝날지 감도 안 잡히는 과제가 많습니다.

과제는 제때제때! 하시길 바랍니다.


이렇게 한 학기를 이겨내시면 여러분들은 컴퓨터구조와 운영체제를 들을 수 있게 됩니다!

오늘은 복전생들의 무덤, 시스템프로그래밍 과목을 살펴봤습니다.

곧 다시 돌아오겠습니다.





제가 적은 글 (클릭하면 연결)


1. 컴퓨터공학과는 뭐하는 곳인가?


2. 컴퓨터공학과 과목 맛보기 - 1. 자료구조


3. 컴퓨터공학과 과목 맛보기 - 2. 시스템프로그래밍(1)


(현재 글) 4. 컴퓨터공학과 과목 맛보기 - 2. 시스템프로그래밍(2)


5. 컴퓨터공학과 과목 맛보기 - 3. 인공지능(1)


6. 컴퓨터공학과 과목 맛보기 - 3. 인공지능(2)


7. 컴퓨터공학과 과목 맛보기 - 4. 알고리즘

rare-웬디의 영스트리트

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.