KoreanFoodie's Study
Reversecore chap 3 - 리틀 엔디언 표기법 본문
'리버싱 핵심 원리'의 내용 및 이슈들과 해결책을 다룹니다.
-
바이트 오더링 :
바이트 오더링은 데이터를 저장하는 방식이라고 기억하면 된다. 크게 두 가지로, 빅 엔디언(Big Endian)과 리틀 엔디언(Little Endian)방식이 있다!
TYPE | Name | SIZE | 데이터 | 빅 엔디언 Style | 리틀 엔디언 Style
|:----|:----|:----|:----|:----|:-----|
BYTE | b | 1 | 0x12; | [12] | [12]
WORD | w | 2 | 0x1234; | [12][34] | [34][12]
DWORD | dw | 4 | 0x12345678 | [12][34][56][78] | [78][56][34][12]
char [] | str | 6 | "abcde"; | [61][62][63][64][65][00] | [61][62][63][64][65][00]바이트(BYTE) 타입의 b변수를 저장할 때는 두 방식의 차이가 없다. 하지만 2바이트 이상의 크기를 가진 자료형을 저장할 때부터 차이가 나타난다!
빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 앞에서부터 순차적으로 저장한다. 하지만 리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장한다(2바이트 혹은 4바이트 자료형과 같이 멀티바이트(multi-bytes)인 경우).
str 문자열은 Endian 형식에 상관없이 동일하다. 문자열은 결국 캐릭터(char) 배열이기 때문에, 각 바이트를 하나씩 연속해서 저장한다고 생각해보면 리틀 엔디언에서도 문자열 자체는 빅 엔디언과 동일한 순서로 저장됨을 이해할 수 있다. -
빅 엔디언 Detail
빅 엔디언은 테이터를 순서대로 저장시키기 떄문에 사람이 보기에 직관적이라는 장점이 있다. 빅 엔디언은 대형 UNIX 서버에 사용되는 RISC 계열의 CPU에서 많이 사용된다. 또한 네트워크 프로토콜에 빅 엔디언이 사용되는데, x86계열의 응용프로그램 개발자와 리버서에게 중요한 의미를 가지고 있다. 애플리케이션 개발에 사용된 데이터를 네트워크로 송수신할 때 엔디언 타입을 변경해야 하기 때문이다!
-
리틀 엔디언 Detail
Intel x86 CPU에서는 리틀 엔디언 방식을 사용한다. 데이터를 역순으로 저장시키는 리틀 엔디언 방식은 산술 연산과 데이터의 타입이 확장/축소될 때 더 효율적이라는 장점을 가지고 있다.
'Ethical Hacking > Reversing' 카테고리의 다른 글
Reversecore chap 7 - 스택 프레임 (0) | 2019.04.24 |
---|---|
Reversecore chap 4 - IA-32 Register 기본 설명 (0) | 2019.04.24 |
Reversecore chap 2 - Hello World! 리버싱 (0) | 2019.04.24 |
Reversebible #2 - C 문법과 디스어셈블링 (0) | 2019.04.24 |
Reversebible #1 - 리버스 엔지니어링만을 위한 어셈블리 (0) | 2019.04.24 |