콘치의 리얼리티 3000% 리버싱 튜토리얼 (1)

By conchi | September 1, 2016

콘치의 리얼리티 3000% 리버싱 튜토리얼 (1)





에, 음, 막을 수 없는(?) 콘치선원의 첫 글입니다.

제목이 왜 이런가 하면


# 제목은_이렇게_결정되었습니다.png


…그러합니다 ㅇ<-<




  • [경고] 이것도 모르겠다고 못 따라하겠다고!!! 빼애애애액 이 글 쓴 사람 구라쟁이다!!! 싶으면 그냥 지금 옆에 있는 컴퓨터를 주변에서 가장 무거운 물건으로 내리치셈 ㅎㅎ… 내 노트북도 부서졌… 읍읍 (혹시나 사과가 그려진 노트북이면 가방에 넣어서 대전으로 오시면 됩니다. 콘치가 잘 쓰겠듬!! 아리가또..!!!!)

  • 나보다 못하는 사람들 눈에만 보이는 글이니…. 아무도 못 보는 건가!!!(찡끗) 무튼 여러분들의 컴퓨터는 소중하니 제가 정말정말저어어엉ㅇ말 쉽게 한번 이야기를 해보겠다는!! 하나부터 열까지 다 알려 줄 테니 님들은 마우스랑 키보드질만 잘 하면서 따라오면 되는거임!!!! 아니 이렇게 친절한 사람이 어딨음????? 다들 콘치 찬양해 헤헤 :3

  • 더 충격적인 건 뭔 줄 아셈? 이렇게 말도 안 될 것 같은 이야기가 아직 한참 더 남았다는 거임 긴장하는 게 정신건강에 이로울 거 같음. 하지만 이 이야기가 다 끝날 때 쯤 이면 누구든 나도 어디 가서 “저 리버싱 해 본적 있는 거 같아요!” 라고 소심하게라도 말 할 수 있게 된다는 거임!! 그러니 글쓴이가 아무래도 제정신이 아닌 것 같아서 속이 거북하다 싶어도 포기 하지 말고 열심히 따라와 주시면 되는 거임!! =^오^=

  • 중간 중간 지극히 개인적인 리알못 콘치의 con(chi)Tip들이 존재함. 언어의 마술사인 듯… 콘치의 tip이라서 콘팁?ㅎㅎ? 노잼 인정.. 무튼 이건 지극히 개인적인 생각들이니 극딜 ㄴㄴ해… 가서 묶어 놓고 팰꺼임!!!!

  • 한줄 요약 : 나만 믿고 따라 오셈!…




은 함정 나만 믿으면 심해로 내려감. 님들 갈 길은 님들이 알아서 가야함.


이 글의 최종목표는 정말 아무것도 모르는 저 같은 컴알못 사람이 아주아주 간단한 코드를 짜보고,

본인이 만든 프로그램을 리버싱 해 보는 거예요. 아 너무 거창하게 생각하지는 마시구요.

내가 혼자 장난감을 조립했다가 다시 풀어헤쳐가며

이 재료가 무엇인지 왜 여기 들어있는지 이런 식으로 알아간다고 생각하면 될 거 같아요.


방금전 여러분의 이해를 돕기 위해 예시로 들었던 대상은 장난감이었지만

조금 설명을 더하자면 우리가 작업하는 환경은 컴퓨터입니다.

그런 컴퓨터에서 우리가 사용하는 것들은 프로그램들입니다.

이런 프로그램들을, 소스코드에서부터 프로그램이 되는 과정 중에서

그나마 사람 눈으로 해석이 가능한 과정으로 역으로 돌아가 분석하는 것을 우리는 리버싱 Reverse Engineering 이라 합니다.

여러분은 이번 시리즈에서 콘치와 함께 프로그램을 만들어보고,

이미 다 만들어져서 나는 더 이상 손 쓸 수 없는 프로그램을 어떻게 사람 눈에 보이는 언어로 만드는지,

그런 중간 과정으로 돌렸을 때, 우리의 소스들은 과연 어떤 형태로 존재하는지,

우리가 이러한 과정들을 통해 어떤 정보를 얻을 수 있을지 알아 볼거에요.

나아가 그 중간과정만 보고 개발자가 처음에 어떤 소스로 프로그램을 만들었는지 까지 알아내보고

하나하나 계속 분해해보면서 이건 무슨 말도 안 되게 못생긴 언어지? 하고 느끼게 될거에요.

이렇게 말하니까 신기해 보이죠?

이게 바로 리버싱입니다.


다시한번 말씀드리지만 우리의 목표는 우리가 직접 코딩해서 프로그램을 만들고,

이걸 다시 우리가 코딩했던 소스코드로 만드는거에요.

어때요 생각만 해도 소름 돋죠? ^0^?!

저게 사람이 할 짓인가 싶겠지만 사람이 할 짓 맞아요!! 헤헤!!

정말 리버싱을 하나도 모르는 이제 막 관심을 가지기 시작한 여러분들을 위한 튜토리얼이기 때문에

그래도 여러분들보다 먼지만큼 빨리 시작한 제가 한수 알려드릴게요.

최대한 쉽게 알려드리려고 노력 할 테니 눈 크게 뜨고 잘 따라오세요.




[들어가기 전에 당부의 말씀]


이건 리얼 Lv.1 초보자 핵뉴비들도 따라 할 수 있어야 하는 튜토리얼이기 때문에

아마 모두들 잘 알고 있는 부분들이겠지만 계속해서 짚고 넘어가는 부분이 많아

잘하는 친구들이 보면 빡칠수도 있으니 그럴 땐 걍 보지마세여 메롱은 농담이고.. ㅜㅜ

이해좀 해주세요.. 누구나 다 처음엔 어려운거에요..


사실 컴퓨터는 우리가 백날 천날 printf(“hellow world!”) 라고 적어줘도

c언어 그 자체만으로는 무슨 말인지 모릅니다.

아마 “?? 닝겐 뭐라는 거임 안들림!! ㅎㅎ!!!” 하고 있을거에요.

우리가 흔히 알고 있는 c, c++, java이러한 언어들을 고급언어라고해요.

우리 눈에 보여서 우리가 직접 입력해서 프로그램을 만들 수 있는 언어들 말이에요

그러나 컴퓨터는 이런 고급언어를 이해하지 못합니다.

따라서 우리가 코딩을 하고 우리 눈에 보이지 않는 여러 과정들을 거치고 나야지

우리가 원하는 동작을 컴퓨터가 해주게 되죠(이 과정은 핵 노잼의 스멜이 진하게 나는 부분이니 다음 편에서 다루도록 할게요).

그 여러 과정 중에 하나가 어셈블리어라는 정체불명의 언어로 바뀌는 과정이고

우리는 앞으로 이 녀석을 샥샥 파헤치게 될 겁니다.

넘나 설레져 ^^?!!!!!

어셈블리어에 대한 내용은 앞으로도 계속 나올 테니 그때 보도록 합시다.

지금 당장은 히익!!! 그런 언어도 있었어?!!! 하고 패스합시다.



음… 자꾸 말이 많아서 미안해여.

이런 긍정주의자 콘치가 살짝 걱정이 되는 부분이 있다면,

리버싱은 옳은 곳(예를 들자면 취약점 분석이나 악성코드 분석과 같은)에서 사용되면

이보다 더 좋은 기술도 없지만 악용되는 경우가 있을까 우려가 됩니다.

그렇게 되는 경우, 자고 일어났는데 갑자기 집 앞으로 경찰서 귀환비서(거래 불가 상품)가 와 있다 던지…

경찰서 앞으로 포탈이 열린다던지..

팔목에 은색 장신구(범죄력 -30)를 차게 되거나 주변 사람들과 당분간 만나지 못하는 상태(은신 +80)가 됩니다.


그러니 혹시나 큰돈에 눈이 멀어 어두운 목적을 가지고 계시거나(한탕 주의자 라던지)

아 나는 윤리의식이 없는 개 쓰레기라서 내 손을 잘라버리지 않는 한 이런 나쁜 짓을 안할 자신이 없어!!

이런 분들은 시작하지 않기를 바랍니다.

티모대ㅇ.. 아니 콘치는 나쁜 인간들을 세상에서 쩰 시러합니다!! =^오^=




음.. 리버싱에 관심을 가지고 이 글을 읽기 시작할 정도면

Visual Studio에 printf(“hellow world!”); 정도는 해 봤….겠죠? 아니라고요? (망치가 어디 있더라…)


해 봤을 거라 믿고 싶지만 저는 여러분을 못 믿겠어요.

그러니까 나랑 지금부터 리얼월드 하나하나 다 해보도록 해요 !!

오늘은 설치부터 해보도록 해요~~!


우리는 지금부터 프로그램을 만들어 볼거에요.


그런데 분명 우리의 바탕화면에 깔려있는 프로그램들은 이미 누군가가 만들어 둔 프로그램들인데..

우리가 굳이 코딩을 할 필요가 있을까요?

우리는 누군가가 만들어둔 프로그램을 분석해야 할텐데?

왜이런 귀찮은 과정을 함께하는지 궁금하신 분들이 계실거에요.


여러분들이 집을 짓는 목수라고 잠깐 최면을 걸어보세요.

자 본인이 계획한대로 집을 지어요.뚝딱뚝딱 ‘ㅅ’ 그리고 집을 다 지었어요.

그리고 그 집에 여러분들의 가족들이 살게 되었습니다.

그런데 지붕이 이상해요.

분명 외관은 멀쩡한데 자꾸 물이 새는 거 같아요.

뭐지? 이럴 때 이 집은 여러분이 지었으니 그 지붕을 어떤 재료를 사용해서 지었는지,

어떤 생각으로 설계를 했었는지 알 테니 그 집을 보수공사해서 물이 새지 않게 해서 잘 살 거에요.


옆집에서 찾아왔어요.

우리집에서 생겼던 똑같은 하자를 그 집 사람들은 모르고 여러분들에게 물어본다고 생각해보세요.

여러분들은 이미 집을 지어보았기 때문에 이럴 땐 어떻게 해야 하고 왜 이런 문제가 발생하는지 쉽게 접근 할 수 있고 해결할 수 있게됩니다.


코딩도 마찬가지에요.


우리는 비록 누군가가 만들어둔 프로그램만을 분석할 확률이 높겠지만,

이런 프로그램들은 어떻게 만들어지는지, 본인이 직접 짜다 보면, 나는 예전에 어떻게 짰더라?

아 개발자가 이런 함수를 사용했으면 이런 취약점이 나오기가 쉬워! 하고 방향을 잡거나 분석을 할 수 있게 되고,

나아가 대처하는데 큰 도움이 됩니다.

그래서 우리는 코딩과 리버싱을 함께 할 계획입니다.

헤헤! 이렇게 하다보면 꼭 리버싱을 전문적으로 하는 직업이 아니더라도,

개발을 하면서도 본인이 만든 프로그램에 대해서 취약점을 찾아 더욱 안전한 프로그램으로 만들 수도 있겠죠?




준비물 갖추기


그럼 코딩부터 해볼까요? 준비물은 다음과 같습니다.


Visual Studio(아무버전이나 본인 컴퓨터에 있는 거 아무거나.. 혹시나 6.0을 쓰고 있다면 이제 좀 놔주세요…),

IDA(가 있으면 좋지만 없어도 괜찮아요 얜 너무 비싸니까요), 열 개의 손가락과,

브론즈 5에서 탈출 할 수 있을 거 같은 자신감정도?

(솔직히 이런 자신감이라면 앞으로 나보다 리버싱 더 잘할 가능성이 높음… 나 왜 브5에서 탈출 못하지…. 살려 주세여)

아참, 제가 하고 있는 환경은 windows 7, 32비트 환경입니다.


아마 Visual Studio라는 프로그램이 없어서 당황하신 분들 있을수도… 있겠죠?

네 그럴 수 있어요.

뭔지 모를 수 있습니다.

준비물 보고 뭐지 내 컴퓨터에 왜 없음 이러고 as센터에 전화하고 그러시지 마시고

자 차근차근히 설치부터 같이 해봅시다.


우선 Visual Studio가 뭐냐 하면!

Windows, Android 및 iOS용 최신 응용 프로그램뿐만 아니라

웹 응용 프로그램 및 클라우드 서비스를 만들기 위한 모든 기능을 갖춘 확장 가능한 무료 IDE입니다…라고 홈페이지에서 그러네요.

그럼 IDE가 궁금하겠죠?

구글에다가 검색하면 위키백과에서 인슐린 소화 효소 라고 뜨는데 놀라시지 마시고(사실 내가놀람)

그 아래에 있는 통합 개발환경을 보시면 됩니다.

위키백과의 말을 빌리자면 코딩, 디버그, 컴파일, 배포 등 프로그램 개발에 관련된

모든 작업을 하나의 프로그램 안에서 처리하는 환경을 제공하는 소프트웨어라고 하네요.


무튼 우리가 프로그램을 만들 수 있게 도와주는 프로그램입니다.

Visual Studio 2015라고 검색하시면 가장 위에

[무료 개발자 도구 - Visual Studio Community 2015] 라는 링크가 보일거에요.

눌러줍시다.

무료라잖아요!

무료!


# 넘나 영롱한 자태!


망설임 없이 Community 2015를 다운로드 버튼을 눌러서 다운로드 해줍시다.

그러면 여러분의 다운로드 폴더에 아마 [vs_community_KOR] 라는 이름을 가진

보라색 세모 세모의 아이콘을 가진 설치 파일이 다운로드 되었을 거에여.

그럼 이 녀석을 더블클릭해서 본격적으로 설치해봅시다.


# 요런 창이 뜨면서 순조롭게 설치되는 척 하고 있습니다. 룰루!




…는 훼이크 Inter Explorer 10이 없다고 경고창이 뜹니다.

저는 그냥 계속을 눌렀어여.

몰랑.. 인터넷 익스플로러 안쓴단 말이야..

찡찡 귀찮게 하지마 찡찡 크롬 쓸꺼얌!!

이럴땐 그냥 계속을 눌러버리면 이제야 그럴싸한 셋팅창이 나타납니다.



요런 창이 나왔네여.

설치 위치는 알아서 설정해주시고

(저는 기본 값으로 되어있는 위치에 그대로 다운 받을거에요)

설치유형은 사용자 지정 설치를 누르고 다음 버튼을 눌러요.



이렇게 체크를 해주시고 (다른 기능이 필요하다면 더 체크해주셔도 될 거 같아요)

다음을 누르고,

설치 버튼을 눌러주시면 됩니다!!

그러면 사용자 계정 컨트롤 창 뜨는데 예 누르시고 ~!!



이런 그림이 나오면 이제 소환사의 협곡에 잠시 다녀오셔도 됩니다.

하 나도 롤 하고 싶어여.. 지금 일주일째 롤 못함..

이제 막 집에 있는 버섯 인형(예전에 받아온 티모의 버섯) 보면 눈물 주륵 나고 그럼..

넘나.. 티모 하고 싶은 것.. 막 티모로 전라인 캐리(라 읽고 똥이라 쓴다) 다녀야하는데 ..

제가 처음부터 브5이긴 했는데 브4에서 브3올라가는 승급전에서 계속 미끄러지다가 브5로 떨어졌어요..

ㅎㅎ.. 전 망한거 같아여.. 그냥.. 글이나 써야겠어요;ㅁ;… 그러니까 다들 롤 끄세요 –


설치하는데 시간이 꽤 걸려요.

이런 말을 왜하냐면..

여러분들과 에러도 함께 나누고 멘붕도 함께나누고 정말 리얼로 알려주기 위해

저도 지금 직접 설치하면서 글을 쓰고 있어요 :) 사무실이라 롤도 못하는데 이제 뭐해야하지..



짜잔 여러분 인내의 시간이 끝나고 설치가 끝났습니댱 >_<

이제 우리는 코딩 + 리버싱을 함께할 시간이 왔져영!!

하 넘나 신나는 것..!! ㅇ_ㅇ..

다시 시작해야 한대여… 다시 시작하고와서 만나자는!

뿅@!!!


은 눌렀는데 반응이 없어서 그냥 하기로 함(시무룩) 치고 있는데 혼자 꺼짐.. 개소름


이 글은 정말 역대급일 듯해여. 이렇게 사실적인 글 본적 있어여? 전 처음 봐여 ㅎㅎ..

그런데 재부팅하고 난 바탕화면에 Visual Studio 2015 아이콘이 없네요.

시작프로그램가시면 보이니까 걱정 ㄴㄴ해여

여기서도 안보이면 [시작 혹은 윈도우 키] – 검색창에다가 vi라고 치면 바로 보일 테니까 그거 누르면 됩니당.

로그인 하라는 창 뜨는데 저는 나중에 로그인 하려고 그냥 넘어갔습니다.

당장 로그인 하셔도 상관없는데 콘치는 계정 까먹음…;;




그리고 나면 이런 화면이 뜨는데 여기서 Visual C++맞춰 주시고

테마는 여러분이 원하시는 대로 해주세요.

전 어둡게 하기로 마음먹었어요.

예전엔 광원 아니면 파랑만 했는데 오래하니까 눈 아픈거같음..

원하는 색상으로 설정해주시고 Visual Studio 시작 눌러주시면 됩니당 !



요런 창이 뜨면서 점들이 옆으로 샥샥 지나가면 이제 준비가 다 된 거에요

기다려줍시다.

컴퓨터의 상태에 따라서 시간이 길기도, 짧기도 하니 걍 잠시 어디 가서 간식 좀 먹고 오시면

아마 이상태가 다 끝나고 드디어 Visual Studio 메인 화면이 뾱 하고 떠있을 거에여!!

막 이 상태 너무 오래 걸린다고 내가 잘 못 깔았나 하고 삭제하거나 그러는 사람은 없겠져!

(는 내가 그래봤음… 오래 걸릴 수 도 있음.. 절대 그러지 마여… 눈물)


# 짜잔 이런 화면이 뜬다면 여러분은 콘치의 계획대로 잘 따라 오고 계시는 거예요 짝짝짝!!




시작해봅시다


지금부터 우리는 실행파일을 만들기 위해서 몇 가지 작업을 하게 될 거에요.

실행파일이라고 하니 되게 거창해 보이지만 별거 아니에요.

제 책상위에 있는 대표님께서 주고가신 딸기들도 할 수 있는 거니까 저만 잘 따라오시면 되염. 깔깔 =^오^=!



[파일] - [새로 만들기(N)] - [프로젝트(P)…]


를 눌러보세요. 그러면 새 프로젝트라는 창이 뜹니다.



그러면 이런 창이 하나 뜨는데 이렇게 Win32 콘솔 응용 프로그램을 클릭하고

이름과 위치를 설정해주시고 확인을 누르면

이제 코딩을 할 준비가 끝나게 되어! 유후!!

코딩할 날이 머지 않았어여 !!! 넘나!! 넘나 신나는 것!!




저는 그냥 빈 프로젝트에 체크해놓고 SDL은 체크를 풀어버렸어요.

이렇게 되면 정말 아무것도 없는 클린한 상태로 코딩을 할 수 있게 되거든여 ㅋㅋ :3

(사실 막 이것저것 내가 모르는 거 복잡한 거 붙을까봐 쫄려서 해제함ㅋㅋ)

다음에 코딩 하실 때는 체크하시고 이번은 풀어줘여. 오늘은 튜토리얼이니까 ~~~ :3



그럼 진짜 이렇게 아무것도 없는 텅 빈 화면이 등장합니다. 짜잔~(잭스 빙의)



옆쪽에 보이는 소스 파일을 오른쪽 버튼 클릭하시고,

[추가] - [새 항목]을 누르시면 아래와 같은 그림이 뜹니다.

그럼 소스파일 이름과 저장 경로를 설정해주시고,

C++파일에 체크해주시고 추가를 누르시면 이제 진짜 리얼 참 트루 코딩준비 끝!




여러분은 지금 코딩준비가 끝난 화면을 보고 계십니다.

이제 저 오른쪽 창에다가 코딩을 해가지구 실행파일을 만든 다음에 디스어셈블을 해 볼거에여!

유후!(뭔가 더럽게 복잡하게 느껴지지만 기분 탓 일거에요!)




…진짜로 시작해 봅시다!!!


아 넘나 힘든 것.. 설치하는데 하루가 다 가 버린 것 같아여 ㅜ_ㅜ.. 넘나.. 기운이 사라진 것


자 이제부터 시작이에여.

설치한김에 우리 간단하게 ‘코딩’이란걸 한번 해봅시당 :)

검은 창에다가 아래의 소스를 따라 쳐 보는거에여 !!

그리고는 [빌드] - [컴파일] 버튼을 누르거나 [ctrl] + [f7] 단축키를 눌러 컴파일을 합니당.

그리고 [ctrl] + [f5]를 눌러주면!!

여러분들이 입력하신 글자들이 화면에 출력 됩니당!

출력잼!!!!!!


넘나 신나는 것 여러분들은 이렇게 하나의 .exe파일을 만든거에여!!!!

막 앉아서 오오오오오오 이러고 있진 않겠죠? ㅋㅋㅋㅋ.. 죄송 내 이야기함..ㅋ…


#include <stdio.h>
int main()
{
    printf("hello world!\n");
    return 0;
}


넘~나~ 간단한 소스에여.

자 이제 이 소스코드를 하나하나 씹고 뜯고 맛보고 즐겨가면서 이야기 해 봐염.




#include


:c언어로 코딩할 때 항상 맨 앞에 쓰는 말이에요.

무슨 의미인지도 모르고 그냥 달달달 외웠던 기억만 있네요.

왜냐하면 이걸 안 붙이면 [Ctrl] + F5 눌렀을 때 안 되거든요.

깔깔!! 아참, 저걸 왜 눌러야 하는지도 다 알려 줄거에요 다음편에!!

지금은 넘나 소스코드만으로도 혼란 스러우니 일단 넘어갑시다.

우리는 printf()라는 표준 라이브러리 함수를 사용하기 위해 stdio.h 라는 헤더를 선언했어요.

헤더는 뭐고 그런 걸 왜 알아야 하죠? 라고 생각하겠지요.


우리가 프로그램을 만들면서 만나게 될 여러 가지 함수들은 라이브러리라는 곳에 들어있어요.

뭐 물론 사스가 짱짱맨분들은 그러한 기능이 되도록 함수를 따로 만들 수 있겠지만,

이렇게 매번 함수를 하나하나 만들어서 사용하게 되면 코드의 길이가 길어지고,

이 말은 프로그램이 느려질 확률이 높아진다는 소리이기도 합니다. ㄷㄷ…. 스피드가 생명인데.. 상상만 해도 끔찍 돋네요…

그런데 어쨌든 함수는 써야하고.. 매번 똑같은걸 자꾸 써야하는데 매번 만들어 쓰기도 끔찍하고..

그런 끔찍한짓을 하지 말라고 사스가 라이브러리라는 곳에에 한 번에 쏵 넣어놓고 필요 할 때마다

그 라이브러리만 시작할 때 선언해주면 언제든 그 함수를 사용할 수 있게 해줬어요

아 물론 제가 한건 아님 ㅎㅎ!!

이런 라이브러리에 들어있는 함수들은 수많은 헤더파일들에 정의되어 있어요

(이렇게 표준 라이브러리들에 들어있는 함수를 우리는 API라고 불러요).

그래서 우리가 프로그램 시작할 때, .h파일을 쓰겠다고 선언해준것이구요. ㅇㅋ?


헤더파일은 꼭 하나만 선언해야 해!

이런 거 절대 아니구요 필요하면 여러 개 선언하셔도 무관합니다.

그럼 #include는 뭘까여. 음… 뭔지는 알겠는데 뭐라 불러야 할지 모르겠죠!

마치 과일 배를 감싸는 그 하얀 그물 같은 스티로폼마냥.. 정확하게는 #이 붙어있는 부분을 전처리 지시자 라고 합니다..

음… 뭔가 샵 인클루드 라고 할 때는 중요도 별 하나정도 되는 무쓸모(마치 나님같이..)한 존재 같았는데

이렇게 이름을 알고 나니 갑자기 좀 중요해보이면서 막 어디선가 어려운 냄새가 나네요.

아.. 다음 편부터 노잼st 이야기 쓸랬는데 벌써부터 노잼 보스의 향기가 나는 거 같네요.

전처리 지시자가 왜 필요한지, 이걸 왜 써야하는지는

다음편에나 나올 “소스코드가 실행파일이 되기까지”에서 조금 자세하게 알아보도록 할거에요.

이거 완전 개 꿀잼이니까 기대하고 있으셈여.

핵꿀잼임 ㅎㅎ! 난…. 정직해여 진심.. 완전 참트루.. 구라아님…

제발 믿어주세여 ㅠㅠ… 날 버리지 마셈… 은 함정카드 짤 쓰려다가 참음 ㅎㅎ..




int main()


int main()
 {
    //소스코드 어쩌구 저쩌구
    //return 0;
 }


int main() 이란 말은 “int형태의 값을 반환하는 main()함수를 만든다” 이런 소리에요.

근데 왜 하필 0이냐, 요것도 궁금하실 듯. 안 궁금해여? 그럼 궁금하다고 해주세여 ㅎㅎ!!


return 0; 이란 말은 에러가 없이 정상적으로 처리 되었다는 걸 의미해요.

main()함수가 아닌 그냥 일반적인 함수(내가 직접 만드는 함수 라던지) 그런 곳에서는 그 함수에서 어떤 일을 하는지,

그 함수가 어떤 값을 반환하느냐에 따라 반환 값이 달라지기도 합니다

(얘는 이름 그대로 무언갈 반환하는 역할을 하거든요).

결국 main()함수에서 return 0; 은 컴퓨터 시스템으로 0을 전달해서

“님 저 정상적으로 종료되었듬ㅎㅎ 걱정 ㄴㄴ해” 하고 알려주는 역할을 한다는거에요.


+) 그럼 void main() 은 뭔가여?

가끔 이런 형태로 선언된 main() 함수도 보실 수 있습니다.

아무것도 반환하지 않는다는 의미로 보시면 될 거에요.




printf(“hellow world!\n”);

드디어 뭔가 의미 있는 소스코드라고 할 만한 것이 나타난 것 같아요.

print()함수를 이용하여 “hellow world!라는 문자열을 출력할꺼셈, 한줄 엔터도 쳐 드림” 이라고 말한거에요.

녜. 그렇습니다.


음 그러니까 우리가 짠 소스코드를 처음부터 끝까지 요약 정리해보자면.


  1. 전처리기를 사용했셈. stdio.h라는 헤더파일을 사용할꺼셈. 왜냐하면 stdio.h 헤더 안에 우리가 쓰고싶은 printf()라는 표준 라이브러리 함수가 들어있기 때문이셈.

  2. 정수(int)형태의 값을 반환하는 main()이라는 함수를 만들꺼임.

  3. 앞서 말한대로 printf()라는 함수를 이용하여 hellow world!라는 문자열이 출력하도록 할꺼임. 아참 \n을 이용하여 한줄 엔터 친 효과를 보이도록 할꺼임.

  4. 할 일이 다 끝났다는. 이제 정수형태의 값(0)을 컴퓨터 시스템에 반환하여 “나는 아무 문제없이 내 할일을 잘 했으니 퇴근 할 거야”라고 알려줄꺼임.

  5. 끝. 즐겁게 롤을 하러간다(브5 탈출 하고싶다…)


뭐 이런셈이 되겠네요.


자 이제 우리가 이렇게 해석한 c소스 코드를 컴퓨터에게 알려주면

컴퓨터는 이 자체로는 뭔 말인지 아마 못 알아먹고 끵? 뀽? 뀨? 님 뭔소리? 할꺼에요.

하지만 이런 컴퓨터에게는 어메이징한 기능들이 있어 사람 눈에 보이는 말(고급언어)을

컴퓨터 말(기계어)로 번역해서 귀신같이 알아먹고는 우리가 원하는 결과를 뿌려줍니다.

이 사기적인 기능들 덕분에 우리는 우리가 직접 만들지 않은 프로그램의 결과물만 가지고

이 프로그램이 어떻게 만들었는지 확인 할 수 있게 되는거에요.

이 말을 하기 위해 이만큼이나 긴 글을 썼네요. 어때여 흥미진진해지기 시작했죠?

헐 다음 편 핵꿀잼 예상!! !!^0^!! 그럼 다음 편부터 본격!

흥미진진한 이야기와 리버싱 냄새나는 것들을 알아보도록 해요.

뿅!




<다음편 예고>

강철 멘탈, 전처리기, 컴파일러, 어셈블러, 실행파일, 성공적


comments powered by Disqus