파일 형식 사양을 문서화하는 방법 [닫기]


12

프로젝트의 경우, 일부 오래된 게임 및 관련 소프트웨어 (구성 파일, 저장, 리소스 아카이브 등)의 다양한 유형의 파일로 작업해야합니다. 이것들 대부분은 아직 문서화되지 않았고 그것들과 함께 작동하는 툴도 존재하지 않기 때문에 형식을 리버스 엔지니어링하고 그것들을 처리하기 위해 자체 라이브러리를 빌드해야합니다.

나는 그것의 대부분에 대한 수요가 크다고 생각하지는 않지만, 노력의 결과를 출판하려고합니다. 파일 형식 문서화에 허용되는 표준이 있습니까? 주위를 둘러 보면 몇 가지 스타일이 사용됩니다. .ZIP 파일 형식 사양 과 같은 일부 는 매우 장황합니다. XentaxWiki와 같은 다른 것들은 훨씬 더 간결합니다. 그들 중 일부는 읽기가 어렵습니다. 제가 개인적으로 가장 좋아 하는 것은 PlayStation 2 메모리 카드 파일 시스템 에 대한 설명입니다. 여기에는 자세한 설명 텍스트와 오프셋이있는 여러 '메모리 맵'이 포함되어 있습니다. 사용 사례와 가장 일치합니다. 형식에 따라 조금씩 다를 수 있지만 따라야 할 일반적인 원칙이 있어야합니다.

편집 : 내가하고 싶은 일을 잘 설명하지 않은 것 같습니다. 예를 만들어 봅시다.

구식 소프트웨어를 '이진'파일에 저장하는 일련의 비트 필드, 정수, 문자열 및 프로그램이 서로 붙어 있지만 이해하기는 쉽지만 사람이 읽을 수는 없습니다. 나는 이것을 해독합니다. 이 파일의 형식이 무엇인지를 사람이 읽을 수있는 방식으로 정확하게 문서화하여이 파일을 구문 분석하고 수정하는 라이브러리를 구현하기위한 사양으로 문서화하고 싶습니다. 또한 다른 사람들이 쉽게 이해할 수 있기를 바랍니다.

그러한 문서를 작성하는 방법에는 여러 가지가 있습니다. 위의 PKZIP 예제는 매우 장황하며 대부분 자유 텍스트로 파일 형식을 설명합니다. PS2 예제는 값 유형, 오프셋 및 크기 테이블과 그 의미에 대한 광범위한 설명을 제공합니다. XentaxWiki의 것들과 같은 많은 다른 것들은 주석이 거의 없거나 전혀없는 변수 유형과 크기만을 나열합니다.

이런 종류의 문서를 작성하는 방법에 대한 지침을 제공하는 코딩 스타일 가이드와 유사한 표준이 있는지 묻습니다. 그렇지 않은 경우 잘 모방해야 할 잘 알려진 훌륭한 예가 있습니까? 그렇지 않다면 누구나 유용한 조언을 적어도 요약 할 수 있습니까?



하아! 나는 그 느낌을 안다. 내가보고있는 한 형식은 실제로 파일을 작성한 원본 소스 코드를 가지고있었습니다. 문제는 변수가 구조체 정의에서와 다른 순서로 작성되고 여분의 것들이 사이에 뿌려 졌다는 것입니다. 그리고 의견은 오프셋에 대해 잘못되었습니다. 그것은이 질문에서 영감을 얻은 것 중 하나입니다.
Sopoforic

1
문서화 된 리버스 엔지니어링 파일 형식에 대한 나의 유일한 경험은 wiibrew.org입니다. 올바르게 기억하면 파일을로 문서화했습니다 struct. 꽤 잘 작동했습니다.
MetaFight

1
나는 질문을 오해하고 있지만 EBNF 와 같은 것을 찾고있는 것 같습니다 .

@MattFenwick : BNF는 언어의 구문을 지정하기위한 것입니다. 내가 쫓아 온 것이 아닙니다. 어떤 종류의 파일 형식인지 더 명확하게 편집하겠습니다.
Sopoforic

답변:


4

이진 파일은 특정 규칙 에 따라 논리 단위로 배열 된 일련의 비트 입니다. 이러한 규칙을 일반적으로 문법 이라고 합니다. 문법은 4 가지 유형 ( Chomsky 계층 ) 으로 분류 될 수 있으며 문맥이없는 문법의 경우 Matt Fenwick이 지적한대로 확장 백 투스-나 우어 양식 을 사용해야합니다 . 파일에 저장된 시퀀스의 해석 (또는 의미)은 구두로 또는 주석이 달린 샘플 프로그램으로 정보를 직렬화하고 역 직렬화하여 설명 할 수 있습니다.

이진 파일 형식을 문서화하는 방법에 대한 자세한 내용은 ASN.1 표준을 참조하십시오 .


기술적 으로 대부분의 구성 파일은 유한 언어이므로 컨텍스트가없는 언어를 사용합니다. 실제로 EBNF에서 '모든 2 바이트 문자열 세트'(예 : 16 개 항목 비트 필드 인 구성 파일의 경우)를 작성해도 아무 것도 가르치지 않습니다. ASN.1 표준에 대한 포인터는 내가 얻은 답변에 가장 가까운 것입니다.하지만 ASN.1의 사양은 컴퓨터가 읽은 것으로 보이며 인간을 위해 문서를 작성하기위한 정보를 원했습니다. 그러나 요구 사항과 더 일치하는 것이 없으면 곧이 답변을 수락합니다. 도와 주셔서 감사합니다.
Sopoforic

2

파일 형식을 빠르게 검색하면 Wikipedia 기사 (파일 형식 목록)가 표시 되기 때문에 이상 합니다 . 또한 몇 가지 비디오 게임 데이터 형식이 포함되어 있습니다.

파일 시스템을 지원하는 시스템, 가장 일반적으로 PC 게임에 대한 비디오 게임 데이터의 일반적인 파일 형식 목록입니다.

또한 다양한 비디오 게임 스토리지 미디어 형식이 포함되어 있습니다.

게임의 ROM 이미지 또는 저장 매체가 백업을 위해 또는 에뮬레이터로 게임을 재생 가능하게하기 위해 원래 ROM 장치에서 하드 디스크와 같은 외부 메모리로 복사 될 때 사용되는 가장 일반적인 파일 이름 확장자 목록입니다. 카트리지 기반 소프트웨어의 경우 플랫폼 별 확장자를 사용하지 않으면 파일 이름 확장자 ".rom"또는 ".bin"을 사용하여 파일에 ROM 컨텐츠의 사본이 포함되어 있음을 명확히합니다. ROM, 디스크 또는 테이프 이미지는 일반적으로 단일 파일 또는 ROM으로 구성되지 않으며 백업 매체의 단일 파일 내에 포함 된 전체 파일 또는 ROM 구조로 구성됩니다.


파일 형식 문서화에 허용되는 표준이 있습니까?

"공식"표준은 어디에도 없습니다. 파일 형식은 회사에서 만들어 지므로 회사는 문서 형식을 결정합니다.


2
내 질문을 오해했다고 생각합니다. 물론 문서화 된 많은 파일 형식이 있습니다-1500 개가 넘는 XentaxWiki를 언급했습니다. 그러나 관심있는 파일은 일반적으로 일반적인 컨테이너 형식이 아니라 파일 저장 또는 구성과 같은 게임 관련 항목으로 문서화되지 않은 경우가 많습니다. 내 상황은 문서가 없으며 일부를 작성하려고하는데 어떻게해야합니까?
Sopoforic

다른 모든 파일 형식을 문서화 한 것과 같은 방식입니다.
Robert Harvey

4
@RobertHarvey : 혼란스럽고 상충되고 부정확하고 불완전합니까? 그러나, 제가 언급했듯이, 몇 가지 다른 일반적인 스타일을 사용하고 있습니다. 특정 스타일이 선호되는지를 아는 것은이 분야의 작업에 익숙하지 않습니다. 내가 본 가장 큰 단일 리소스 인 XentaxWiki에있는 것은 거의 독점적으로 컨테이너 형식을위한 것이므로보다 일반적인 경우에는 해당되지 않습니다. 에뮬레이션하기 위해 임의의 예제를 선택하는 것만으로 충분하다고 생각한다면 조언을 구하지 않을 것입니다.
Sopoforic

@Sopoforic : 그렇다면 당신은 당신이 원하는 것을 명확하게해야합니다. "파일 형식에 대한 설명서는 어떻게 작성합니까?" 해당 주제에 전념하는 기술 문서 작성에 대한 전체 교육 커리큘럼이 있습니다. 명확하고 잘 작성된 문서 (개인 표준에 따라)가있는 형식을 찾아 그 형식을 에뮬레이션하십시오. 그들은 모두 쓰레기가 될 수 없습니다. 힌트 : 사용 예는 훌륭합니다. 설명의 명확성은 두 번째로 가깝습니다.
Robert Harvey

1
@RobertHarvey : 예, 코드를 주석 처리하는 방법이나 함수를 문서화하는 방법에 대한 질문과 마찬가지로, 포괄적 인 형식 사양을 작성하기위한 '스타일 가이드'를 찾고 있습니다. RFC 작성 방법을 알고 싶다면 RFC 2223을 살펴보십시오. Python 코드에서 어떤 스타일을 사용해야하는지 알고 싶다면 PEP 8을 읽을 수 있습니다. 질문을하는 방법을 알고 싶다면 Smart Way, ESR에서 다루었습니다. 파일 형식 사양에 대한 유사한 지침이 있습니까? 아니면 잘 알려진 훌륭한 예입니까? 나는 분명히 내 자신의 판단을 사용할 수 있지만 표준이 존재하면 그것을 따르는 것이 합리적입니다.
Sopoforic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.