JSCC 준비

왜 nasm을 이용하지 않나요?

3. 왜 nasm을 이용하지 않나요?

이미 좋은 어셈블러와 링커가 있는데도 불구하고 어셈블러와 링커를 손수 제작한다는 점이 못마땅할 수 있다이에 대해 지금 이야기를 풀어야 앞으로 하는 모든 코딩을 납득할 수 있을 것이므로 이 자리에서 이에 대해 설명하는 것이 좋겠다.

3.1) JSCC는 순수하게 논리만으로 컴파일러를 개발하는 것이 가능함을 보이는 프로젝트입니다.

이 프로젝트는 컴파일러를 개발하고 싶은 초중급 프로그래머를 위한 것이다일단 우리가 실행해서 사용하고 있으니 제대로 만들 수 있는 건 맞지만정말 그것이 가능한가를 증명함으로써 가슴 한 구석에 품고 있던 막연한 궁금증을 푸는 실마리가 된다또한 다른 도구를 이용하지 않고 컴파일러를 개발해냈다는 나름의 자부심이 생길 것이다.

3.2) 우리가 무엇을 하는지를 정확히 이해하게 됩니다.

단순히 컴파일러를 어떻게 만들 수 있는지를 이해할 수 있는 것만이 아니다인간의 코드가 기계어로 번역되는 과정을 이해하면다른 고급 언어를 사용하여 코드를 작성할 때 이것이 어떤 이유에서 그렇게 구현되었는가를 보다 명확하고 논리적으로 이해할 수 있게 된다.

3.3) 프로그램 디버깅리버스 엔지니어링에 큰 도움이 됩니다.

역공학에 능하려면 우선 정공학에 능해야 한다는 건 자명하므로 자세하게 설명하지 않아도 될 것이다리버싱은 이미 만들어진 프로그램을 다른 도구를 이용하여 분석하는 공학을 이야기하는데올리디버거와 같은 도구를 사용한다면 프로그램을 실행하자마자 화면에 수십만 개의 어셈블리 코드를 만나게 된다우리가 컴파일러를 개발할 때는 어셈블리 언어에 싫어도 익숙해질 수밖에 없고요즘 웬만한 프로그램은 고급 언어로 작성되었으며 컴파일러는 나름의 방법으로 고급 언어를 저급 언어로 번역한다따라서 컴파일러가 고급 언어 코드를 번역하는 패턴을 파악한다면 완성된 프로그램을 열어 어셈블리 코드를 분석할 때 어떤 부분이 지역 변수의 선언이며 어떤 부분이 루프를 형성하는지를 이해하는 데 크게 도움을 준다.

이 정도면 기존의 프로그램을 이용하지 않는 것에 대해 어느 정도 그럴 만한 이유가 있다고 받아들일 수 있으리라 믿는다그래도 이러한 내용이 필요하지 않다고 생각한다면 후에 연재할 컴파일러 개발에 관한 문서만 참조하면 될 것이다.

댓글

댓글 본문
graphittie 자세히 보기