brunch

You can make anything
by writing

C.S.Lewis

by Younggi Seo Oct 13. 2021

YUZA OS 구현을 위한 빌드

사전 준비 - Top-down으로 익히는 OS 구현




4년 전에 임베디드 관련 IoT 보안 교육을 받으면서 C를 수강한 적이 있었다. 그때 선수학습으로 프로그래밍의 컴파일 과정에 대해서 꽤나 공부하면서 이후에 디스어셈블리(역공학) 실습으로 우분투에서 버퍼 오버플로 공격도 했다.



그런데 시스템이든 네트워크든 보안이든 용어에 대한 쓰임새나 맥락은 모두 동일하기 때문에 한 분야에서 정확하게 개념을 파악하면 나머지도 자연스럽게 이해가 되는 게 IT 영역이라는 것을 매번 깨닫는다.



이를테면, 코딩한 프로그램이 컴퓨터에서 작동하려면 사용자가 작성한 소소를 CPU가 해석할 수 있는 언어(Native code)로 변환(Compile)되어야 하는데 이것을 각종 개발 툴(IDE, Integrated Development Environment)에서 이루어지며, 그 번역을 실행하는 주체는 CPU이다.



만든 프로그래밍 언어는 각양각색이더라도 컴파일러에 의해 언어마다 다른 소스코드를 해석해서 컴퓨터가 이해할 수 있는 비트의 집합(16진수)으로 다루므로 모든 데이터는 컴퓨터에서 숫자로 취급이 가능하다.



 컴파일 과정 이후 실행파일(예를 들면 exe 확장자를 가진 파일) 만들어지기까지 컴파일과 같은 실행 가능파일생성하는 단계가 한번 더 필요한데, 이때 생성하는 파일을 객체 코드(object code)라고 부르며 네이티브 코드에서 여러 개의 오브젝트 코드가 합쳐지면서 연결(link) 이루어져 이것을 Linker 수행한다고 한다.  



네트워크 방화벽 단에서 정책을 만들 때도 이와 같은 생성 원리로 하나의 정책을 생성할 수 있다. 즉, 방화벽은 일단 시간 객체, 주소 객체, 서비스 객체 등 여러 개의 객체로 나뉠 수 있는데, 네트워크단에서 흐르는 서비스 포트나 IP 혹은 특정 시간대가 반드시 일회성으로 이루어지는 게 아니라면, 미리 많이 통신되는 포트, 출발지 IP, 목적지 IP를 개별이든 그룹으로 객체를 생성시켜 놓고, 필요한 정책을 세팅할 때 이러한 객체(object)를 복사해서 하나의 정책으로 연결(Link)시킬 수 있다.



이러면 프로그래밍에서와 같이 실행파일을 컴파일할 때 객체 가령, test.obj 등을 필요할 때마다 사용할 수 있듯이 방화벽단에서도 정책을 생성할 때, 미리 생성해놓은 오브젝트(여러 개의 객체 그룹일 수도 있는)를 한 번에 조합해서 빠르고 손쉽게 정책 변경이나 추가가 가능하다.



YUZA OS를 빌드하기 위해 책의 저자가 미리 github에 업로드한 소스를 다운로드해서 각 솔루션을 실행하고 빌드했는데, 저자가 사용한 컴파일러와 동일했을 거라 예상되는 같은 버전의 IDE를 사용하고도 빌드의 실패 개수가 초중반부터 늘어나기 시작하더니, 마지막 콘솔 솔루션을 실행 후 빌드할 때는 성공보다 실패의 개수가 많아서 콘솔에서 'Hello, wordl!!"의 실행파일 한 번 컴파일해보지 못하고 두 번째 실습을 마쳤다.



  

YUZA OS 빌드  


 

YUZA 소스코드를 다운받는다 :


YUZA OS 소스코드 다운로드


비주얼 스튜디오 2019 또는 상위 버전을 설치한다.


비주얼 스튜디오 확장 플러그인인 VSNASM을 설치한다.

프로젝트를 빌드할 시 솔루션 구성은 DEBUG, 솔루션 플랫폼은 WIN32로 설정한다.


runtime 폴더로 이동해서 runtime.sln 솔루션을 실행한 다음 빌드한다. 정상 빌드가 되지 않는 경우 어셈블리 파일 빌드를 위해 필요한 확장 플러그인인 VSNASM을 설치했는지 확인한다.

corelib.sln을 실행하고 빌드한다.

thirdparty 폴더로 이동해서 ThirdParty.sln을 실행한 다음 빌드한다.

support.sln을 실행하고 빌드한다.

device.sln을 실행하고 빌드한다.

thirdParty/SDL/SDL2 폴더로 이동해서 SDL2.sln을 실행한 다음 빌드한다.

thirdParty/SDL/SDL1CL 폴더로 이동해서 sdlcl.sln을 실행한 다음 빌드한다.

thirdparty2 폴더로 이동해서 ThirdParty2.sln을 실행한 다음 빌드한다.

kernel.sln 솔루션을 실행한 다음 빌드한다.



샘플 프로젝트

YUZA OS 1권에서 설명하는 샘플 프로젝트다. 역시 소스코드 내에 포함되어 있다.  

01_console.sln : 콘솔 프로젝트에서 HelloWorld 문자열 출력





Selected from: https://wikidocs.net/135017

매거진의 이전글 YUZA OS 맛보기
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari