본문 바로가기

(비정기) Dlbo's Post

파일시스템 - 04. FAT 엔트리의 내용, 디렉터리.


FAT 엔트리에 관한 저번 내용을 보셨다면, 문득 궁금한 내용이 생기시지 않았을까 합니다.

"디렉터리는?"

하는 의문 말이지요.

-_-; 뭔가 글씨가 안맞네요.

FAT 시스템에서는 디렉터리나 파일이나 동일한 구조를 갖습니다.


  1. Name 필드 - 최초 8바이트의 필드로, 이 엔트리가 지시하고 있는 파일의 이름을 가지고 있는 필드입니다. 8바이트중 텅 빈 부분은 공백문자(20h)로 메꿔넣어야 하며, 0h로 채워넣게 되면 대략 낭패.
  2. Extender 필드 - 이름에서도 느껴지듯, 확장자가 들어가는 필드입니다. 3글자만 가능하며, 3바이트로 구성, 디렉터리인 경우는 빈칸으로 둡니다.
  3. Attrivute 필드 - 01부터 02, 04, 08, 10, 20, F0의 값을 가지고 있는 1바이트 필드이며, 이게 어떤 파일인지를 표시해 줍니다. 보통 01이면 읽기 전ㅇㅇ, 02이면 숨긴 파일, 04이면 시스템, 08이면 이 자체로 하-_-드디스크가 되며;;; 10이면 디렉터리임을, 20이면 그냥 파일임을, F0이면 FAT32부터 사용가능한 긴 파일명을 지원하기 위한 엔트리임을 표현합니다.
  4. NT 리소스 필드 - 냅두세요. 0으로 채워둬야 합니다. 윈도가 지멋대로 메꿔요 -_-. 1바이트 크기이구요.
  5. CTT 필드 - Create Time Tenth라는 요상한 이름의 필드입니다. '만들어진 시간 10번째'라는 요상한 의미가 아닙니다; 파일 생성 시간을 10분의 1 단위로 기록해둔 내용입니다. 1바이트 크깁니다.
  6. CT 필드 - Create Time이라는 이름의 필드로, 2바이트 공간을 차지합니다. 5비트로 초, 6비트로 분, 나머지 5비트로 시간을 표시합니다.
  7. CD 필드 - Create Date라는 필드로, 생성된 시날짜, 월, 연도를 표기하는 2바이트 필드입니다. 날, 월, 년 순으로 5, 4, 7비트를 차지합니다.
  8. LAD 필드 - Last Access Date 필드로 마지막으로 건드린 날짜를 기록하는 2바이트 필드입니다.
  9. First Cluster High 2B - 첫번째 클러스터 번호의 상위 2바이트를 답고 있는 2바이트 필드입니다만, FAT16이라면 클러스터 크기가 2바이트인지라 0이 표기됩니다. FAT 32라면 여기에 상위 2바이트가 표기되겠지요?
  10. Write Time - 가장 최근에 이 파일을 수정한 시간으로, 파일 생성도 쓰기로 간주합니다. 2바이트 필드입니다.
  11. Write Date - 다른 말이 필요 없겠지요? 날짜입니다.
  12. First Cluster Low 2B - 아까 9번 친구 뒤에 이어지는 2바이트 클러스터 번호입니다. FAT16이라면 이 친구만 실제 값을 가집니다.
  13. File Size - 바이러스 만들어본 분들은 종종 건드려 봤을겁니다. 4바이트 필드로, 파일의 사이즈를 표현합니다. 최대 4기가를 넘을 수 없으며, 디렉터리로 체크되어 있다면 이 필드는 0이 되어야 합니다. 용량이 있는 디렉터리가 있으면 그건 마치 자-_-웅동체 같지 않아요?

이전 포스트에서 보았던 파일 클러스터 체인의 내용은 사실 12번 내용만 표기한 겁니다.

루트 디렉터리니 일반 디렉터리니 파일이니 전부 저거만 봤던 거였지요. ㅡ_ㅡ

근데 잘 살펴 보면, 어찌 됐건 별 차이 없지 않나요? -_-ㅋㅋㅋ