이제 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)가 복잡해진다는 것이지요. ㅠㅠ

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

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


 오늘은 즐거운(??) 예비군 훈련날이라 야근없이 바로 집에왔습니다. 그리고 밥 한그릇 빨리 뚝딱하고 ELF64 파일 포맷에 대한 문서를 작성하기 시작했습니다. 사실 시작은 어제부터 했지만, 본격적으로 시작한 건 오늘부터라서... ^^;;;;

 문서는 Relocation 방법에 대해서 초점이 맞춰져 있지만, 기반 설명을 위해 앞쪽에 ELF64 파일 포멧에 대한 내용을 넣는게 좋겠다는 생각이 들더군요. 그래서 스펙 문서를 긁어 붙이면서 설명 첨부하는 식으로 간단히 넘어갔습니다.

 그런데 그 동안 테스트 프로그램으로 ELF64를 분석할때는 별 문제 없는 것 같던 Relocation Type이라는 값이, 문서를 작성하려고 보니까 뭔가 이상한겁니다. ㅠㅠ 제가 보고 있는 ELF64 문서의 버전이 낮아서 그런지 타입에 대한 설명을 건너뛰었더군요. 그래서 ELF32에 문서쪽을 찾아보니  32bit 기준으로 설정되어 있어서, 뭔가 일치하지 않는 부분이 있었습니다. 한가지 예를 들면 objdump.exe로 Relocation Entry를 읽으면 Relocation Type이 0x0B인 것이 나오는데, ELF32에는 0x0A까지만 정의되어 있더군요. ㅡ_ㅡ;;;;;;

 도저히 이건 아니다 싶어서 다시 구글 검색을 시작했습니다. 결국 AMD쪽 사이트에서 문서를 구했습니다. 생각보다 자료를 찾기가 쉽지 않네요. 이런쪽을 파보는 사람이 별로 없어서 그런가... ㅡ_ㅡa... 앞으로 테스트 프로그램을 짤때도 정리를 꼭 해야겠습니다. 정리를 안하니 그냥 아는 척(??) 하고 넘어가게 되네요. ㅠㅠ



 이런 이유로... 오늘 하루종일 결국 삽질만 하고 정녕 Relocation 처리는 완료하지 못했습니다. 크윽... 내일은 금요일이니 좀 신경써서 마무리를 하고 64Bit Test OS에 올려봐야겠네요. ;)

 그럼 다들 좋은 밤 되시길~ ;)

ps) 어디 고정 폭 폰트 중에서 저작권 없는 깜찍한 폰트 없나요? ㅠㅠ

정 안되면 폰트 홍보해주겠다고 하고 저작권료를 안주는 방법을 고민해봐야할지도... ㅠㅠ

살려주세요~!!! ㅠㅠ



+ Recent posts