0%

.class 파일의 맨 처음에는 CAFE BABE (카페 베이베) 가 적힌거 아시나요?, 파일 hex 값 보기

java

.class 파일의 맨 처음에는 CAFE BABE (카페 베이베) 가 적힌거 아시나요?

hex editor로 .java 파일을 컴파일한 .class로 된 파일을 열어보면,
아래와 같이 CAFEBABE로 시작하는 것을 확인할 수 있습니다.
file

hex editor 확인방법

  1. vscode에서 ctrl + shift +x 버튼을 눌른 후, 플러그인 hex editor 플러그인을 설치해줍니다.
    file

  2. vscode에 .class로 된 파일을 drag & drop 한 뒤, open anyway버튼 -> hex editor 를 선택하면, hex 값을 확인할 수 있습니다.
    file
    file
    file
    file

CAFE BABE가 된 이유

자바의 아버지 제임스 고슬링의 설명 :

1
2
3
4
5
6
7
8
9
10
11
12
우리는 예전에 세인트 마이클스 앨리라는 곳에서 점심을 먹곤 했습니다. 
지역 전설에 따르면 아주 먼 옛날 그레이트풀 데드가 뜨기 전에 그곳에서 공연을 하곤 했다고 합니다. 그
곳은 정말 펑키한 곳이었고, 확실히 그레이트풀 데드 같은 곳이었습니다.
제리의 사망 당시에는 작은 불교풍의 사당까지 세워졌습니다.
우리가 그곳에 갈 때는 카페 데드라고 불렀습니다.
어느 시점에선가 이것이 헥스 숫자라는 것이 발견되었습니다.
저는 파일 형식 코드를 재작업하면서 몇 가지 매직 넘버가 필요했습니다
: 지속성 객체 파일용 하나, 클래스용 하나. 객체 파일 형식으로 CAFEDEAD를 사용했고,
"CAFE" 다음에 맞는 4자리 헥스 단어를 grep으로 검색하던 중 BABE를 발견하고 사용하기로 결정했습니다.
당시에는 별로 중요하지 않거나 역사의 휴지통으로 사라질 운명처럼 보이지 않았습니다.
그래서 CAFEBABE는 클래스 파일 형식이 되었고, CAFEDEAD는 지속성 객체 형식이 되었습니다.
하지만 지속성 객체 기능이 사라지면서 CAFEDEAD의 사용도 함께 사라졌고, 결국 RMI로 대체되었습니다.

출처 : https://en.wikipedia.org/wiki/Java_class_file#Magic_Number