이제 OS를 만드는 작업이 거의 막판까지 왔습니다. 커널에서는 이미 System Call 처리를 위한 준비를 끝낸 상태이며, 이제 응용프로그램을 적절히 로드해서 실행하는 것만 남았습니다. ^^;;; 그동안 작업을 주로 윈도우 환경에서 했기때문에 PE 파일 포맷을 주로 다뤘습니다(PE 파일 포맷에 대한 내용은 http://kkamagui.tistory.com/search/PE%20%ED%8C%8C%EC%9D%BC 을 참고하세요).

 이번에 ELF 파일 포맷 쪽을 다루는 김에 문서를 좀 남겨둘려고 허접하지만 문서 작업을 같이 했더니, 이해하는데 훨씬 도움이 되더군요. 물론 아는 내용을 정리하는 작업이 좀 지루하기는 하지만, 시간이 지나면 다 잊어먹으니 나중을 대비해서라도 정리하는 게 좋을 것 같더라구요. ㅎㅎ

 정리를 죽 하다보니, 머리로만 이해하고 있던 내용 중에 잘못된 것도 찾을 수 있었고, 확실히 보지 않으면 정리를 할 수 없으니 문서를 세세히 찾아볼 수 있었습니다. ^^;;; 어제 늦게 정리된 내용을 바탕으로 ELF64 Relocator(가칭)을 만들었는데, 나름대로 잘 동작하더군요. :)

 ELF64 Relocator는 Relocatable 파일 형식으로 생성된 ELF64 파일을 Relocation을 수행해서 마치 Executable 파일 형식으로 생성된 것 처럼 만들어주는 프로그램입니다. 만약 문서를 제대로 이해했다면 Relocatable 파일 형식으로 나온 것을 Relocation 시킨 결과나 Executable 파일 형식으로 만든 결과가 같아야 합니다. 간단한 테스트 프로그램으로 테스트 해본 결과 디스어셈블리한 결과가 똑같이 나왔습니다. >ㅁ<)-b

 아아~ 이제 남은 것은 OS에서 ELF64 형식을 그대로 쓰느냐, 아니면 별도의 가공을 통해 새로운 파일 포맷을 만드느냐인데... 사실 가장 좋은 방법은 ELF64의 Relocatable 파일 형식을 그대로 쓰는 겁니다. 이렇게되면 별 다른 수정없이 윈도우나 리눅스 계열에서 빌드된 ELF64 파일을 그대로 실행할 수 있는 장점이 있습니다. 하지만 단점은 커널에 들어있는 실행파일 로더(Loader)가 복잡해진다는 것이지요. ㅠㅠ

 새로운 파일 포맷을 만드는 방법은 커널에 있는 로더를 간단히 할 수 있는 장점이 있습니다만, 파일 포맷을 변환하는 단계를 거쳐야되서 빌드 시에 단계가 하나 더 추가되는 단점이 있습니다. 파일 포맷 변환 프로그램도 작성해야하구요. ㅎㅎ

 이거 어느 것을 선택하는 게 옳은 건지 판단을 내리기가 좀 힘들군요. 빨리 이걸 결정해야 실행파일을 돌려볼 수 있을텐데... ㅠㅠ 어휴... 고민입니다. ㅠㅠ


+ Recent posts