'튜토리얼/FAT12'에 해당되는 글 3

  1. 2009/06/12 Drilling FAT12 - 3편 (6)
  2. 2009/06/11 Drilling FAT12 - 2편
  3. 2009/06/09 Drilling FAT12 - 1편 (1)
 

Drilling FAT12 - 3편

튜토리얼/FAT12 | 2009/06/12 13:16 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
Practice

 이번편에서 수동으로 FAT12를 구축해보고 Drilling FAT12를 마칠꺼라능. 2편에 있는 링크를 타고가서 일단 HxD를 깔자능...그리고 Virtual Floppy Drive랑 empty.img도 받자능. 일단 VFD를 켜고 Driver 탭의 Browse... 버튼을 눌러서 압축을 풀면 같이 들어있는 vfd.sys 를 선택해 주자능. 


 그리고 밑에있는 Start 버튼을 눌러주라능. 그리고 Drive0 텝으로 가자능. Change 버튼을 눌러서 드라이브 문자를 바꿔주라능. 맘에 드는걸로 바꿔주고 Open... 버튼을 누른 다음에 Browse... 버튼을 눌러서 empty.img를 선택해주고 Disk Type를 FILE로 선택해 골라주자능.


 됐다능. 이제 가상드라이브가 작동하게 되었심. 탐색기를 켜보면 새 드라이브가 생겨난걸 볼 수 있을꺼라능. 더블클릭하면 포멧을 할꺼냐고 물어보는데 반드시 쌩까도록하삼. 그리구 나서 HxD를 켜자능. HxD의 Extras 메뉴에서 Open Disk를 눌러서 방금 만든 가상드라이브를 골라주라능. Open as Readonly는 꼭 꺼놓으라능.


 OK를 눌르면 뭐라고 경고창이 뜨는데 우리 같은 프로들 한태는 필요업ㅂ은 소리라능. 쌩까자능. 아무튼 여기까지 끝냈으면 아래 그림과 같은 모습이 될꺼심. 준비끝이라능. 한 화면에 한 섹터의 전체를 다 볼 수 있게 창크기를 조절하는 센스가 있으면 더욱 좋다능.


이제부터 다음과 같은 순서로 진행할꺼라능

(1) 디스켓을 FAT12로 포멧된 상태로 만든다.
(2) 루트 디렉토리에 서브 디렉토리를 하나 추가한다.
(3) 루트 디렉토리랑 서브 디렉토리에 각각 하나씩 파일을 추가해본다.

(1) 포멧시키기

 화면에 Drilling FAT12 1편을 열어 놓고 표를 봐가면서 내용을 채우자능. 2바이트 이상되는 필드를 채울때는 엔디안을 주의해야된다능. 아..ㅅㅂ 귀차늠. intel 훡훡. 10진수를 16진수로 바꿀때는 윈도우 계산기가 참 좋음. 일단 32바이트를 채웠다능.

EB 4E 90 44 43 49 4E 53 49 44 45 00 02 01 01 00
02 E0 00 40 0B F0 09 00 12 00 02 00 00 00 00 00

 필드 별로 색을 번갈아 칠해 놨으니까 표를 보면서 값이 어떻게 들어갔나 확인해보라능. OEM 네임은 DCINSIDE를 넣어놨다능 ㅋㅋㅋㅋ. 아무튼...표를 보고 쓰라는 데로 똑같이 쓰면 된다능. 나머지 48바이트도 마져 채워넣자능. 참...아스키 문자를 넣고 싶을때는 코드표를 찾아가면서 16진수를 쓰지말고 옆에 아스키코드로 보여주는 칸에다 커서를 놓고 쓰면 된다능. 괜히 삽질하지 말자능. 아무튼 나머지 48바이트임.

40 0B 00 00 00 00 29 FF FF FF FF 56 4F 4C 55 4D
45 4C 41 42 45 4C 46 41 54 31 32 20 20 20 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

 이번에도 역시 의미별로 같은 색을 채워 놨다능. 이제 부트섹터가 완성됐다능.


 일단 저장을 한번 해주고 FAT를 만들어 보자능. 위쪽의 툴바에 있는 Sector에 1이라구 쳐서 1섹터로 이동하자능. Drilling FAT12 2편을 열어놓고 FAT를 채워보자능. 주의사항에 보면 엔트리가 하나는 있어야 된다구 써있다능. 일단 FFF를 써주자능.

F0 FF F0 F0

 10번 섹터로 이동해서 똑같은 내용을 또 써주자능. 명심하라능 FAT는 똑같은걸 두개 만들어서 보관한다능. 그리고 루트 디렉토리가 시작하는 19번 섹터로 이동하자능. 아래처럼 볼륨 라벨을 써주자능. 주의사항에 볼륨 라벨을 만들어 넣을때 어캐해야 된다고 써있따능.

56 4F 4C 55 4D 45 4C 41 42 45 4C 08 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

 HxD를 끄고 VFD를 언마운트 했다가 다시 마운트 해보자능. 탐색기를 켜보면 가상 드라이브가 읽어질꺼라능. 볼륨 라벨도 들어가 있다능. >_<.


(2) 서브 디렉토리 만들기

 TESTDIR이라는 이름의 서브 디렉토리를 만들껀데....TESTDIR의 내용은 33번 섹터에 집어넣도록 하자능. 일단 FAT를 고치자능.

F0 FF FF FF 0F

 빨간색으로 칠해놓은게 새로 추가된 내용이라능. FAT2도 고쳐주는걸 잊지말라능. 33번 섹터를 Last cluster of file 이라고 표시해 놨따능. 19번 섹터로 이동해서 루트 디렉토리에 TESTDIR 이름으로 엔트리를 하나 추가하자능.

54 45 53 54 44 49 52 20 20 20 20 10 00 00 00 00
00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00

 주의 사항에 보면 33번 섹터를 사용할꺼라고 표시할때는 First logical sector에 2를 쓰라고 했다능. 이제 33번 섹터로 이동하자능. 아..주의할꺼는 위의 두줄은 offset 00002620 부터 써넣는거임. 00002610에 0만 잔뜩 써있다고 여기다 넣으면 젖된다능. 00002610은 볼륨 라벨의 뒤쪽 16바이트 자리라능. 해깔리지 않도록 조심하라능. 주의 사항에 보면은 서브 디렉토리에는 "." 이랑 ".." 이 반드시 있어야 된다고 했다능. 만들어 주자능.

2E 20 20 20 20 20 20 20 20 20 20 10 00 00 00 00
00 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00

2E 2E 20 20 20 20 20 20 20 20 20 10 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

 이제 탐색기로 디스크 드라이브를 열어보자능. TESTDIR 이라는 디렉토리가 생겨있을꺼라능 >_<.


(3) 파일 추가하기

 디렉토리 만들기까지 생공했다능. 별루 안어렵지 않냐능 하악. 아무튼...이제 루트 디렉토리랑 TESTDIR에 파일을 추가해 보자능. 루트 디렉토리에는 4바이트짜리 "1.TXT" 를 추가하고 서브디렉토리에는 22바이트짜리 "2.TXT" 를 추가할꺼라능. 추가된 파일이 메모장으로 열어지면 성ㅋ공ㅋ라능.

 역시 FAT를 먼저 고치자능. "1.TXT" 는 34번 섹터에 집어넣고 "2.TXT" 는 35번 섹터에 넣을꺼라능. 

F0 FF FF FF FF FF FF 0F

 색칠한게 새로 추가한 부분이라능. 루트 디렉토리랑 TESTDIR에 파일을 하나씩 추가하자능

31 20 20 20 20 20 20 20 54 58 54 20 00 00 00 00
00 00 00 00 00 00 00 00 00 00 03 00 04 00 00 00

32 20 20 20 20 20 20 20 54 58 54 20 00 00 00 00
00 00 00 00 00 00 00 00 00 00 04 00 16 00 00 00

 이제 34번 섹터랑 35번 섹터에 4바이트 22바이트씩 내용을 넣어주자능. 물론 안넣어어도 상관은 업ㅂ다능 -_-;;

54 45 53 54

44 43 20 50 52 4F 47 52 41 4D 4D 49 4E 47 20 47
41 4C 4C 45 52 59

하악. 끝났따능. 최종 결과물이라능.


 총 3회에 걸쳐서 FAT12에 대해서 알아봤다능.FAT12는 간단한 파일 시스템이고...현재는 거의 쓰이지 않는다능. 디스켓 따위를 누가 쓰냐능 -_-;;; FAT32를 배워보기전에 몸풀기 용으로 배워본다고 하는데 의의를 두자능. 이 글에서 자세히 다뤄보지 않은건 여러 섹터에 걸쳐있는 파일에 대한 FAT 엔트리를 집어넣는건데...이건 나도 어캐하는지 모른다능. -_-;; 누가좀 가르쳐 주삼 읭읭.

 
저작자 표시 비영리 동일 조건 변경 허락

'튜토리얼 > FAT12' 카테고리의 다른 글

Drilling FAT12 - 3편  (6) 2009/06/12
Drilling FAT12 - 2편  (0) 2009/06/11
Drilling FAT12 - 1편  (1) 2009/06/09
TAG fat12

댓글을 달아 주세요

  1. Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo 2009/06/17 17:37  댓글주소  수정/삭제  댓글쓰기

    여리님의 Chobits OS에 대해 해설한 노재현씨의 책인 "개발자를 위한 나만의 운영체제 만들기, 정보문화사"에 FAT12의 엔트리와 클러스터에 대해서 대충 나와있긴 합니다만 -_-; 좀 이해하기 힘듭니다;

  2. Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo 2009/06/19 13:38  댓글주소  수정/삭제  댓글쓰기

    "고급 개발자들만이 알고 있던 OS 제작의 원리, 그리고 Codes, 오재준 저" 요 책에 훨씬 자세하게 나와있군요 ㅡ,.ㅡ; 위에 책은 쪼까 설명이 애매합니다 -_-;

  3. kjj 2010/08/27 22:55  댓글주소  수정/삭제  댓글쓰기

    좋은정보 감사합니다. ^^ FAT32 도 부탁드린다능~~~

Drilling FAT12 - 2편

튜토리얼/FAT12 | 2009/06/11 00:13 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
FAT(File Alloction Table)
 

 FAT에는 위에 보이는 Data Area의 각 섹터들에 대한 메타 데이터들이 들어있다능. FAT가 시작할 때는 일단 시작한다는 의미로 0xF0으로 한바이트를 채워줘야 되고 끝날때는 0x0F로 끝내줘야 된다능. 그리고 FAT12니까 FAT의 한 엔트리는 12비트라능. 시작할때랑 끝날때 꼭 써줘야 되는게 있으니까 뭐 이런식임.

F0 FF FF FF FF F0 F0 00 00 00 00 00

 지금 엔트리가 세개 들어가 있는 상황이라능. 중간에 잉여스페이스가 업ㅂ이 데이터가 들어간다는걸 알 수 있다능. FAT는 일종의 링크드 리스트를 구성하기 위한 거라고만 알아두고 일단은 각 엔트리에 써넣는 12비트의 의미를 알아보자능.


 이 중에 중요한거는 Last cluster of file 이랑 Number of next cluster of file 이라능. 일단은 넘어가자능. Bad cluster는 이거는 못쓰는 거라구 표시하는거 인거 같은데......중요하긴 한거 같은데 쌩까고 넘어가자능.

Directory

 디렉토리는 자신가 가지고 있는 파일이나 디렉토리의 메타 정보를 가지구 있는 파일이라능. FAT12에서도 디렉토리는 파일이랑 별다를꺼 업ㅂ이 Data Area에 들어간다능. 루트 디렉토리는 존니스트 특별하니까 따로 나와있는데 별다를꺼는 업ㅂ다능. 아무튼 요 디렉토리에 들어가는 엔트리는 32바이트의 크기를 가진다능. 
 
 각 엔트리가 의미하는거는 가지고 있는 파일이나 디렉토리리를 표현하고 있는 링크드 리스트의 헤드 노드라능. 내용은 들어있지 않은 더미 헤드임. 32바이트가 어떤 순서로 채워지는지를 보고 또 이야기 하자능.


 이중에 중요한거는 Filename, Extension, Attributes, First Logical Cluster, File size라능 다른거는 다 0으로 채워넣어도 파일을 읽어내는데는 아무 문제도 업ㅂ다능 -_-;; 아무튼...Attributes 1바이트가 뭘 의미하는지 또 알아보자능.


 첫번째 비트가 1이면 읽기전용 0이면 보통 뭐 이런식이라능. Archive가 파일임 >_<. 이제 이 정보랑 FAT 테이블의 정보를 가지고 어떻게 파일을 링크드 리스트로 표현해 놨는지 살펴보자능. 별거아니라능.

 일단 파일은 무조건 512 바이트로 쪼개서 저장된다능. 그리고 FAT의 각 엔트리는 Data area의 각 섹터들과 1:1로 매칭이 된다능. 가장 앞 엔트리가 33번 섹터, 그 다음이 34번 섹터....하는 식이삼. 디렉토리 엔트리의 First Logical Cluster를 보고 파일이 어떤 섹터에 저장되 있는지를 알아낸다능. 여기서는 33번 섹터라고 파일 사이즈가 512 바이트보다 커서 1124라고 하자능. 분명 이 파일은 3섹터에 걸쳐서 저장되 있을꺼임. 

(1) 일단 33번 섹터를 뜯어온다능. 뜯어온 크기는 섹터의 크기, 512 바이트라능
(2) 그 다음 33번 섹터와 메칭되는 FAT 엔트리의 값을 살펴본다능.
(3) 그러면 Number of next cluster of file 에 해당하는 값이 써 있어서 Date area의 어떤 섹터에 파일의 나머지가 저장되 있는지 알 수 있심.
(4) 그리로 가서 또 한 섹터를 뜯어옴. 또 FAT 엔트리를 살펴봄. Last cluster of file이 걸릴때까지 반복한다능.
(5) Last cluster of file이 걸리면 역시 한섹터를 뜯어오는데 앞에서부터 남은 크기만큼 남겨놓고 나머지는 버린다능.

적당히 그림한번 그려보면 느낌이 올꺼라능. 아래 그림을 보고 손꾸락으로 따라가면서 느껴보자능. EOC는 end of cluster라능.


개념들은 대충 알아봤고 주의점만 집어보고 끝내자능. 설명을 쉽게 해보려고 지난간 내용들이라능. 능력의 한계를 느낌. 읭읭

(1) 디렉토리 엔트리에 채우는 First logical cluster는 숫자가 2부터 시작한다능 33은 2고 34는 3이라고 써야됨.
(2) 루트 디렉토리엔트리에 Volume label 속성을 가지고 있는 파일이 있으면 그게 볼륨라벨이 된다능. 이넘은 First logical cluster랑 file size가 다 0임. 파일이 아닌거 같다능. 부트섹터에 써있는데 왜 또 쓰냐고 물어보면 나는 모름 -_-
(3) 서브 디렉토리를 만들면 파일 사이즈는 0으로 채워주면 된다능.
(4) 서브 디렉토리의 가장 앞의 두 엔트리는 "." 이랑 ".." 이 들어있어야 된다능. 이게 어떤 의미인지랑 어떤 값을 채워야 되는지는 대충 감이 올꺼라능.
(5) 서브디렉토리를 만들고 First logical cluster를 0으로 넣으면 루트 디렉토리로 가게 된다능 -_-;;
(6) FAT에는 사용하는 섹터가 하나도 없어도 FFF가 하나 들어가 있다능. 고로 F0 FF F0 F0 이 FAT에 있으면 사용하는 섹터가 하나도 업ㅂ은 거라능.
(7) 파일이름 가장 앞이 0xE5 이면 지워진거라능. 개으른 삭제임
(8) 파일이름 가장 앞이 0x00 이면 이 엔트리가 디렉토리 엔트리의 끝이라능. 그리고 이 뒤에 나오는 엔트리들은 다 무시한다능.

 
설치해야될 프로그램들

3편에서 사용할 프로그램들과 잉여 이미지 파일이라능.

HxD : http://mh-nexus.de/en/downloads.php?product=HxD 
 여기서 영문버젼을 받자. 엄청 좋은 프로그램이다. 파일은 물론이고 피지컬 디스크, 로지컬 디스크, 실행중인 프로세스까지 다 까볼 수 있다. 괜히 이걸로 하드디스크 열어보구 엄한거 손대서 좆되지 말자. 게임할때 아주 좋게 쓸 수 있다능.

Virtual Floppy Drive : http://webscripts.softpedia.com/scriptDownload/Virtual-Floppy-Drive-Download-39797.html 
 여기서 바이너리를 받자능. 설치안해도 쓸 수 있다.


 3.5인치 2HD 플로피디스켓 용량에 꼭 맞춰서 0으로 채워놓은 이미지 파일이다. 이걸 HxD로 고쳐서 FAT12 파일 시스템을 수동으로 구축한 다음에 Virtual Floppy Drive 로 마운트 해볼꺼라능.

컴퓨터에 3.5인치 디스크 드라이브가 있고 남는 디스켓이 있으면 HxD만 받으면 된다. 업ㅂ으면 일단 다 받고 설치를 하자능.
저작자 표시 비영리 동일 조건 변경 허락

'튜토리얼 > FAT12' 카테고리의 다른 글

Drilling FAT12 - 3편  (6) 2009/06/12
Drilling FAT12 - 2편  (0) 2009/06/11
Drilling FAT12 - 1편  (1) 2009/06/09
TAG fat12

댓글을 달아 주세요

Drilling FAT12 - 1편

튜토리얼/FAT12 | 2009/06/09 01:49 | Posted by DMW
크리에이티브 커먼즈 라이선스
Creative Commons License
 FAT12를 드릴링해보자능. 총 3편으로 구성될꺼고....HxD라는 헥사 에디터로 플로피 이미지를 만들어서 Virtual Floppy Drive란 가상 드라이브 유틸을 써서 이걸 읽어보는게 최종 목표다. 프겔에도 같이 올리고 있따능.

Overview

 FAT12는 플로피디스크에 사용되는 파일시스템이라능. 12라는 숫자는 FAT( File Allocation Table )의 엔트리 하나가 12비트라는걸 의미하는 숫자라능.

 플로피디스크는 클러스터 Cluster 라고 불리는 단위로 쪼개져서 사용되는데....보통 더 용량이 큰 저장장치는 섹터 Sector를 여러게 묶어서 클러스터를 만들어서 관리한다. 플로피디스크는 한 클러스터에 한 섹터만 들어가 있다. 고로 클러스터나 섹터가 똑같다고 보면 된다능. 한 섹터는 512 바이트라능.


 FAT12의 구조다. 첫번째 섹터는 부트섹터고 바로 뒤에 FAT 테이블이 온다능. FAT는 매우 중요하기 때문에 똑같은걸 두개를 만들어 놓는다능. 그리고 루트 디렉토리에 해당하는 섹터들이 뒤따르고 33 섹터부터 끝까지 실제 파일과 디렉토리의 내용이 들어가게 된다.

잔소리리는 여기까지고....1.4MB 짜리 2HD 플로피디스크를 예로들어 각각에 대해 설명을 해보겠다능.

Boot Sector
 파일시스템에 관한 여러가지 정보이 앞에 나오고 부트로더도 여기에 처박힌다. FAT12 파일 시스템을 구축하려면 부트섹터의 앞에 아래와 같은 순서로 데이터들이 들어가 있어야된다.

Byte

Sotored data

11

이거는 무시한다고 하는데....여기서 뭔가 있긴 있어야 된다.
EB 4e 90을 쓰고, 뭔가 쓰고싶은걸로 8바이트를 체우자.
ex) EB 4E 90 44 4D 57 00 00 00 00 00, 아스키 코드로 보면 "ëN DMW     " 이 된다.
>_<

2

섹터 당 바이트 수, 512로 해야 된다.

1

클러스터 당 섹터 수, 1로 해야 된다

2

FAT가 시작되는 섹터, 1이라고 쓰면 된다.

1

FAT의 수, 2로 쓰면 된다.

2

루트디렉토리의 엔트리 수, 224로 하면 된다.

2

전체 섹터의 수, 2880으로 하면 된다.

1

미디어 타입, 240(0xf0)으로 하면 된다.

2

FAT 하나의 길이, 9로 하면 된다.

2

트랙당 섹터의 수, 18로 하면 된다.

2

헤드의 수, 2로 하면 된다.

4

무시 한다는데....0을 써야 된다.

4

전체 섹터 수를 한번 더 쓴다. 2880(FAT12에서는 0을 쓴다는데 2880도 아무튼 된다)

2

무시, 0으로 채워주자

1

부트 시그내쳐 Boot signature란다. 0x29를 넣어야 된다.

4

볼륨 ID, 0xffffffff를 넣으니까 되더라능

11

볼륨 라벨, 디스크이름이다. 11바이트를 꼭 맞춰서 모자라면 스페이스를 넣어주자.
ex) "DMW        "

8

파일 시스템 타입, 마찬가지로 스페이스를 채워서 "FAT12   " 라고 써주자

18

잉여공간이다. 0을 채워주자

 총 합 80 바이트다. 이 뒤로 부트로더가 들어오면 되는데....필요가 없다면 나머지 432 바이트를 0으로 채우자. 그럼 512 바이트가 꽉차서 부트섹터 완성이라능.

추가  - 프겔의 아브릴흉이 알려줬다. 
 부트 섹터의 앞의 3바이트는 디스크가 부팅가능한 미디어로 사용 될 때 뒤에오는 77바이트의 실행되지 않는 데이터를 건너 뛰는 점프 인스트럭션이 와야한다고 한다. 읭읭 내가 봤던 PDF 문서에는 ignore라고 써있었따능 ㅠ.ㅠ

 그 뒤에 8바이트는 OEM이름 이라고 한다능.

위에 설명한데로 채워넣어도 상관은 업ㅂ지만....의미는 알고 넘어가자능.
저작자 표시 비영리 동일 조건 변경 허락

'튜토리얼 > FAT12' 카테고리의 다른 글

Drilling FAT12 - 3편  (6) 2009/06/12
Drilling FAT12 - 2편  (0) 2009/06/11
Drilling FAT12 - 1편  (1) 2009/06/09
TAG fat12

댓글을 달아 주세요

  1. Favicon of http://dlbo.tistory.com BlogIcon Lonewolf dlbo 2009/06/17 17:03  댓글주소  수정/삭제  댓글쓰기

    아흙. 커널 책들 보고 있는데 FAT12 설명 쥐뿔도 없이 돌려대서 죽을 맛이었는데 -_-! 좋은 정보 감사합니다