본문 바로가기

쓰기

저도 프로그래밍은 조금 배웠지만, 디버깅에 대해선 아는게 없어서 밑의 글을 읽고 도움이 참 되었습니다.

다만, 프로그래밍 경험이 없는 분들의 입장에선 조금 이해하기 어렵단 생각이 드네요.ㅎ

특히 첫번째 강좌와 두번째 강좌의 레벨차이가 꽤 난다는 생각이 듭니다...


그래서 밑의 강좌의 보충 설명, 즉 vol 1.5 정도로 가볼까 생각중입니다만 잘 될 수 있으면 좋겠네요ㅋ

하지만 저도 일단은 초보라서 다소 설명에 틀린 부분이나 미흡한 부분이 있을 수 있으니 태클 많이 걸어주세요ㅎ


그럼 우선 컴퓨터가 어떻게 돌아가는지 살짝 살펴본 후, 프로그래밍의 원리를 설명할게요ㅎ



1. CPU


CPU 는 뭐 워낙 컴퓨터의 기본이라 많이들 들어보셨겠지만, 간단히 말하자면 고성능 계산기입니다...

그런데 워낙 고성능이라 사칙연산이 아니라 일종의 논리계산이란 것을 합니다.


이산수학이나 논리 등을 배우신 분들은 익숙하실 수도 있는데요,


A 가 참이고 B 도 참이면 A 와 B 둘다 참이므로 A and B 는 참입니다.

하지만 둘중 하나나 둘 다 거짓이면 A and B는 거짓이 되어버리겠죠 ??


참을 1 로 표현하고 거짓을 0으로 표현한다면 1 and 1 은 참(1)이고 그 외에는 모두 거짓(0)이 되겠습니다.

눈치 채신분들 계시겠지만 즉 컴퓨터는 이진수 계산을 하기 때문에 1은 참으로 0을 거짓으로 해서

모든 논리 계산을 한답니다. 논리계산이 뭐 이것저것 많아서 다 쓰기도 그렇지만

기본적으로 and 이외에 or, not, nand, xor 정도가 있습니다....

컴퓨터의 사칙연산은 사실은 논리연산의 응용입니다. and 는 논리 곱이라고도 하는데 잘 생각해보시면 이해가 되실 듯;


컴퓨터는 이렇듯 기본적으로 계산기이기 때문에 computer 라는 단어도 직역하자면 계산기라는 뜻이됩니다.


더 아시고 싶으신 분들께서는 트랜지스터에 대한 간단한 책 한번 읽어보세요. 그럼 도움이 될 것입니다...


2. 메모리


그럼 CPU는 계산을 하는데, 계산하는 숫자들은 어디서 와서 어디로 가느냐....

그것이 메모리입니다.

CPU는 계산하려 하는 정보들을 메모리에서 읽어서 할일을 한 후 메모리에 다시 저장시킵니다.

(사실 조금 더 복잡하긴 하지만, 적어도 지금은 이것 이상 알 필요가 없습니다.)

메모리는 블록으로 된 구조라고 생각하시면 쉬운데요, 한 블록이 각각 1byte 입니다.

그리고 각각의 블록에는 주소가 있는데요, 보통 16진수의 숫자로 표현됩니다....

컴퓨터는 2진수만 알아듣는데 왜 주소는 16진수로 표기하냐면요...

컴퓨터가 16진수를 알아들어서가 아니라, 사람들이 읽기 편해서 입니다.

다 아시겠지만 2진수는 저희가 평소에 사용하는 10진수보다도 꽤 불편하고 깁니다.

16진수 특성상 네 자리 2진수는 16진수 한 자리에 표현됩니다.

즉 0001 0001 0000 0010 이런 숫자도 16진수로는 1 1 0 2 이렇게 줄여지는거죠/ㅎ

무슨 숫자든 컴퓨터 내부에서는 다 2진수로 바뀌어서 사용됩니다.


그런데 CPU는 이런걸 어떻게 다 알고 척척 계산하는 걸까요...

사실 CPU는 알아서 하는게 아니라 처음부터 끝까지 프로그래머가 시키는 것만 합니다.


3. 프로그래머와 컴퓨터 언어, 그리고 코드


프로그래머는 다들 아시겠지만 컴퓨터 언어를 이용해 코드를 작성하는 사람입니다.

코드는 말하자면 컴퓨터에게 내리는 명령의 집합입니다.

즉 컴퓨터한테 이거해라 저거해라 시키는 거죠.

코드에 존재하는 함수란 녀석도 결국 반복되는 명령들의 그룹입니다.

사실 스크린에 글자 하나 출력하는 것에도 다양한 명령들이 필요합니다.

그래서 출력에 필요한 명령들만 묶어서 '출력함수'라고 명명하고 하나의 함수를 만든 것이죠...


코드도 컴퓨터 언어에 따라 바뀝니다. 컴퓨터 언어는 목적에 따라, 효율성에 따라 다양한 것들이 쓰이지만

유명한 것으로 C/++, Java, Lisp, Python, 그 외에도 이것저것 많이 있습니다.


프로그래밍을 통해 CPU는 결국 제 구실을 하게 됩니다. 메모리에 저장되어있던 단순한 0 과 1도

프로그래머에 의해 그 의미를 찾게 되는 것이죠...


그렇다면 이제 프로그래머는 코딩을 했습니다. 앞에서 G2M 님께서 설명했듯이,

컴퓨터는 코드 조차도 알아볼 수 없어서, 기계어로 일일이 번역을 해줘야 합니다.

다행이 프로그래밍 언어에는 그러한 번역기가 같이 있는데, 그것이 compiler 입니다.


4. Compiler


사실 보면 번역된 언어가 원문하고 완벽하게 똑같을 수가 없습니다. 똑같애서도 안되고요.

예를 들어 영어에서 a piece of cake 라는 표현이 있지요. 직역하면 케이크 한조각이겠지만,

문맥에 따라서 '굉장히 쉬운 일' 이라는 관용어로 의역할 수도 있습니다...

이렇듯 컴퓨터에게도 최적화라는 의역이 필요합니다.


아까 함수에 대한 언급이 있었는데요, 어떤 함수들은 꽤 덩치가 큽니다.

하지만 프로그래머들은 편의를 위해서 덩치 큰 함수들을 자주 쓰게 됩니다.

그렇지만 한번 두번 계속 쓰다보면 덩치가 커서 속도도 느려지고 효율이 떨어지죠...

그래서 컴파일러는 최적화를 하게 됩니다.


예를 들어 이런 함수가 있습니다.

주어진 수가 1이면 1을 내보내고,

주어진 수가 2이면 2를 내보내고,

주어진 수가 3이면 3을 내보내고,

.... 해서 10까지 있습니다.


그런데 프로그래머가 1을 입력했으면, 나머지 조건은 거들떠 볼 필요도 없겠죠?

그래서 컴파일러는 나머지를 버리고 첫번째만 CPU에게 전달합니다.

이것은 함수 중에서도 굉장히 단순한 함수이지만, 어떤 함수들은 정말 수백줄이 되는 것들도 있습니다.

그런 함수에서 단순히 한 두 기능 쓰고 넘어간다면 최적화를 시켜야겠죠?


(******사실 컴파일러에 대한 부분은 그냥 이해하기 쉬우라고 실제와 많이 다르게 썼습니다....

컴파일러 자체도 꼭 번역기라 할 수는 없고요 ... 뭐 조금 복잡합니다....
 이 부분은 그냥 말이 그렇다는 것이지,,, 너무 진심으로 받아들이지는 마세요...
 솔직히 그냥 그런거구나 이해만 하시면 실제 후킹 할때는 별 필요도 없는 부분입니다.******)


그럼 이제 마지막으로 디버깅에 대해서 간단히 설명해 보겠습니다.


5. 디버깅


디버깅은 G2M님의 설명대로 오류를 없애기 위한 것이 본 목적입니다.

단어 자체도 de+bug 라서 버그를 없앤다란 뜻이죠.

하지만 이것이 잘만 이용하면 프로그램이 어떻게 돌아가는 지 알 수 있습니다.

CPU가 하는 일을 메모리에서 일어나는 일을 통해 간접적으로 알 수 있거든요...

하지만 한계는 여기서 드러납니다.


앞에서 보여드렸듯이 함수에는 여러가지 조건들이 있습니다. 기본적으로 한 조건이 충족되면

함수는 끝나버리기 때문에, 단순히 CPU가 뭘했는지만 봐서는 함수의 전체 모습을 알 수가 없습니다.

게다가 최적화로 인해 함수의 많은 부분이 잘려버리게 됩니다.


후킹은 이래서 쉽지 않습니다...

솔직히 함수와 코드를 알 수 있다면 게임의 대사가 메모리 어디에 어느식으로 저장되는지 쉽게 추적 가능하기 때문에

후킹이 훨씬 쉬워지지만, 디버깅을 통한다면 일일이 메모리를 뒤져보고 규칙을 찾는 수 밖에 없습니다.

이정도 이해하셨으면 후에 디버깅의 원리에 대해서도 어느정도 이해가 가실거라 생각합니다...


간단하게 설명하려다 굉장히 길어졌네요...

어떻게 하면 쉽게 설명이 될까 생각하다가 이것저것 별걸 다 쓴것 같은 기분입니다.

얄팍한 지식으로 어떤건 좀 말도 안되게 쓴 것도 있지만, vol 1.5로서 이해만 된다면 대단한 문제는 아닐 듯 싶네요....?!


후킹에 관심있으신 분들께 도움이 됐으면 좋겠습니다.

조회 수 :
8099
등록일 :
2010.06.24
03:53:00
엮인글 :
https://arallab.hided.net/1281506/941/trackback
게시글 주소 :
https://arallab.hided.net/board_lecture/1281506

roman

2010.07.09
20:20:28

설명을 간결히 잘 해주셔서 이해가 잘 됐네요.

수고하셨어요~

합리적사고

2010.09.26
09:43:59

와!! 아주 기초적인 지식에 대해서 잘 설명해 주셨네요.

 수고하셨습니다~

List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜sort 최근 수정일
공지 아랄트랜스로 게임하기 앞서 기본 셋팅 확인하기! [4] file TwoComet 40489   2012-08-30 2014-02-26 20:12
공지 아랄트랜스 - 초보자 가이드 [94] file Hide_D 319319   2008-07-16 2015-02-27 18:02
공지 모든 플러그인, 필터 안내 ('09.03.13) [20] Hide_D 191370   2008-10-31 2009-03-13 23:48
공지 아랄트랜스 0.2 - 초보자 가이드 [109] file 아랄 505837   2008-07-16 2013-12-31 09:32
177 한국 IP 차단된 일본 사이트 접속하는 방법 [8] 키리아스 19684   2010-08-13 2012-05-18 11:24
http://www.aliveproxy.com/high-anonymity-proxy-list/ 위 사이트에 접속하면 IP:Port Host name 라고 적힌 밑에 255.255.255.255 : 80AA 이런 식으로 주소와 포트가 적혀있습니다. 익스플로러 도구 모음에서 도구 -> 인터넷 옵션 -> 연결 -> LAN 설정에서 프...  
176 혹시나 하루카나소라(요스가노소라 팬디) 실행오류 있으신분은 보세요! file Gintoki 10901   2010-07-25 2012-09-24 01:24
 
175 오토보쿠2 아랄을 후커처럼 사용해보자. [3] file Ria- 6903   2010-07-03 2015-04-23 01:06
 
» 밑의 글의 보충 설명이랄까요 [2] 불협 8099   2010-06-24 2010-09-26 09:43
저도 프로그래밍은 조금 배웠지만, 디버깅에 대해선 아는게 없어서 밑의 글을 읽고 도움이 참 되었습니다. 다만, 프로그래밍 경험이 없는 분들의 입장에선 조금 이해하기 어렵단 생각이 드네요.ㅎ 특히 첫번째 강좌와 두번째 강좌의 레벨차이가 꽤 난다는 생각...  
173 그녀x그녀x그녀 아랄 후킹시 튕기는 문제 관련 팁... [5] 月狼 10577   2010-06-11 2010-06-11 21:28
간단한 팁...이라고 생각됩니다만 몇글자 적어봅니다 현재도 그녀x그녀x그녀(이하 년년년)를 아를로 훅해서 플레이 하시는분이 계실거라 생각합니다 근데 현재 년년년의 플러그인은 AT가 아닌 SCP입니다 아랄연구소의 Hide_D님 말씀에 의하면 메모리 누수라던...  
172 ATCode를 적용할 때 [꼭] 확인해야 할 사항들 [4] Hide_D 14165   2010-05-16 2013-12-05 19:26
자주 올라오는 질문들을 보면서 사용자가 자주 놓치는 AT코드 적용 부분에 대해서 설명해보려고 합니다. 1. AppLocale (어플로케일), KonJ 추가 실행 여부 첫번째 관문입니다. 글 속에 '어플 실행'이라고 쓰여있으면 [꼭!] 어플로케일로 게임을 켜주세요. 2. ...  
171 아랄트랜스는 어디서 받나요? Hide_D 7712   2010-04-29 2010-04-29 16:42
폴라리스 커뮤니티에서는 아랄트랜스로 미소녀 게임을 이용하는 방법 (AT코드 등)을 다루고 있으며, 아랄트랜스 본체는 http://lab.aralgood.com/ 에서 받을 수 있습니다.  
170 코드파인드를 위한 기초 지식(2) [29] file G2m 18799   2010-02-01 2011-11-08 00:55
 
169 코드파인드를 위한 기초 지식. [13] G2m 22909   2010-02-01 2013-04-13 16:47
코드파인드를 위한 기초지식 Vol. 1 기계어 컴퓨터가 이해할 수 있는 유일한 언어. 사람이 짠 프로그램 소스는 일종의 번역기에 의하여 기계어로 번역되어지고 컴퓨터는 이것을 실행하게 된다. 프로그램 일반적으로는 함수의 집합체라고 한다. 여기서 말하는 ...  
168 φage엔진 코드 찾기 강좌. [10] file FrigateBird 12515   2010-01-30 2010-02-02 11:53
 
167 세이나루 아티팩트 설명 [3] file Beriche 9635   2010-01-30 2010-05-13 04:25
 
166 인터넷 익스플로러 8에서 겟츄 검색 사용하기 [1] file whoami 9644   2010-01-23 2010-02-01 07:49
 
165 공주사냥 던전 마이스터 (히메가리) 설치 방법 키리아스 21030   2010-01-16 2010-01-16 16:01
CD 이미지를 툴을 이용해서 디스크에 집어넣고, Setup을 어플로케일로 실행하는건 아시겠지요. 계정이 영문이 아니면 안된다고 합니다. 저는 설치에 별다른 문제는 없었어요. 문제는 패치인데. 패치와 확장팩이 자동 설치이기 때문에, 그냥 실행하면 1152 오류...  
164 전여신zero 우연히 알게된 팁..; [2] file 제니우스 11660   2010-01-15 2010-04-21 14:36
 
163 자료마당에 존재하는 귀축왕 란스 SSG가 작동하지 않는 분들을 위한 팁 OVER WORLD 10132   2010-01-14 2010-01-14 23:18
자료마당의 이용자자료실에 보면 귀축왕 란스의 SSG가 존재합니다. system3.9 ver.5.49에서만 작동하지요. system3.5에서는 작동하지 않습니다. 그런데 혹시 system3.9 ver.5.49임에도 불구하고 SSG가 작동하지 않는 분들이 계시지 않습니까? 제가 그러했습니...  
162 [0.3]CmdFilter로 RemoveSpace 기능을 임시로 넣기.. [2] 유피에르 58416   2009-12-22 2009-12-23 02:02
실내용보다 서두가 길어질듯 합니다만...;;;;; 일단 2BYTE에 RemoveSpace 기능이 존재 하긴 합니다만 모든 문자가 2BYTE로 바뀌는 문제가 있습니다. 간단하게 CmdFilter로 공백문자 제거를 해준후.... 고급설정 - 다음 16진수 아스키 코드가 가르키는 문자를 B...  
161 코드파인더들을 위한 0.3 적용법. [2] file FrigateBird 70971   2009-12-22 2012-03-04 06:47
 
160 시노비류(忍流) 플레이 TIP [5] 마기우스 11172   2009-12-18 2010-01-04 00:04
우선 이걸 어디다 올릴지 고민하다 강좌&팁에 올리기로 했습니다. 공략이라고 하기는 많이 부족한 감이 있어서요. 공략이나 팁 같은 글은 처음으로 써보는 군요. 항상 보기만 하다가 한 번 올려봅니다. 참고로 CG회수나 각 엔딩 조건 같은 건 옆동내 섬나...  
159 아랄트랜스 0.2용 플러그인 DumpFile이 완성되었습니다. [8] Hide_D 12472   2009-12-11 2010-11-14 11:48
자세한 정보는 이곳 http://lab.aralgood.com/29827 현재 사용 용도는 AT코드 파인더분들을 위해 특화되어 있습니다. 자주 튕겨서 필터를 설정하기 까다로웠던 경우라면 추천합니다 ^^  
158 조금이라도 아랄트랜스를 빨리 쓰고 싶은 사람들을 위한 팁! [2] Hide_D 13123   2009-12-06 2015-04-12 15:59
AGTH와는 달리 아랄트랜스 속도가 느려지면 게임 속도 자체가 느려지기 때문에, 이래저래 골치가 아프기 마련이죠. 아랄트랜스에서 속도를 느리게 만드는건 다른게 아니라 '번역 속도'입니다. 딴 필터 100개 끼워봐야 번역속도로 느린 걸 당할 게 없으니까요....