바이너리 파일(OBJ 파일, a.out, ELF 등)의 인코딩 형식은 무엇입니까?

바이너리 파일(OBJ 파일, a.out, ELF 등)의 인코딩 형식은 무엇입니까?

vim에서 바이너리 파일을 열면 0s및 대신 니모닉이 표시됩니다 1s. 나는 이것이 vim이 기본적으로 ASCII 모드로 파일을 열기 때문이라고 생각합니다. 내 이해가 맞나요? 바이너리 파일의 인코딩 형식은 무엇입니까? UTF-8인가요? xxd바이너리 파일이 16진수로 덤프된다는 것을 알고 있습니다 Vim. 하지만 왜 vim이나 텍스트 편집기가 바이너리 파일을 0s1s.

답변1

모든 최신 운영 체제에서 모든 바이너리 파일은 일련의 바이트 또는 8비트 그룹으로 저장되고 처리됩니다. 실제로 모든 텍스트 파일은 이런 방식으로 저장됩니다.

대부분의 경우 텍스트 편집기(또는 바이너리 파일 편집기)는 저장 단위이기 때문에 바이트를 표시하도록 설계되었습니다. 다른 값을 포함하도록 이진 파일을 편집하려는 경우 한 번에 여러 비트를 편집하는 것보다 한 번에 한 바이트를 편집하는 것이 더 유용합니다. 예를 들어, 데이터 파일을 편집하여 값을 1234에서 5678로 변경하는 경우 바이트를 정렬하는 스트림에서 일부 비트 시퀀스를 찾는 것보다 바이트 를 검색 04 d2한 다음 OR d2 04로 바꾸는 것이 훨씬 쉽습니다 .16 2e2e 16

Vim은 다른 많은 텍스트 편집기와 마찬가지로 단일 바이트 인코딩(보통 Vim에서)을 사용하는 모드로 바이너리 파일을 엽니다 latin1. 문자 인코딩은 바이너리 데이터가 아닌 텍스트 데이터(즉, 사람이 이해할 수 있는 것을 나타내는 데이터)에 사용되기 때문에 어떤 인코딩을 사용하는지는 별로 흥미롭지 않습니다. 단일 바이트 인코딩을 사용하는 목적은 모든 바이트 시퀀스가 ​​유효하고 로드 또는 저장 시 수정되지 않는다는 것입니다.

마지막으로, 바이너리 파일도 텍스트 파일만큼 명확하지는 않더라도 일반적으로 일부 구조를 가지고 있습니다. 예를 들어 ELF 파일은 0x7f 바이트로 시작하고 그 뒤에 문자가 옵니다 ELF. 그런 다음 클래스(32비트 또는 64비트), 바이트 순서, 버전 및 ABI에 대한 바이트를 포함합니다. 텍스트 파일과 달리 형식에 익숙하지 않으면 쉽게 읽을 수 없는 형식입니다.

관련 정보