공부/리버싱핵심원리

3장 리틀 엔디언 표기법

리버싱 핵심원리.

먼저 컴퓨터에서 메모리에 데이터를 저장하는 방식에는 리틀 엔디언 표기법, 빅 엔디언 표기법이 있다.

이런 방식을 바이트 오더링 (Byte Ordering)이라고 한다.

이런 코드가 있다고 하자. 총 4개의 크기가 다른 자료형이 있다.

TYPE Name SIZE 빅 엔디언 리틀 엔디언
BYTE b 1 [12] [12]
WORD w 2 [12][34] [34][12]
DWORD dw 4 [12][34][56][78] [78][56][34][12]
char [] str 6 [61][62][63][64][65][00] [61][62][63][64][65][00]

(아스키 'a' 16진수는 0x61임)

빅 엔디언과 리틀 엔디언은 2바이트 이사의 크기를 가진 자료형을 저장할 때부터 차이가 난다.

빅 엔디언 방식은 사람이 보는 방식과 동일하게 앞에서 부터 저장한다.

리틀 엔디언 방식은 역순으로 저장한다. 

str 문자열은 Endian 형식에 상관없이 동일한데, 문자열은 Char 배열이기 때문에 각 바이트를 하나씩 연속해서 저장한다고 생각한다고 한다.

내가 생각했던 방법은, char 하나는 각각 1BYTE이니, 이 1BYTE들이 각각 연속적으로 저장된거라 역순으로 저장하지 않는다고 생각했다.

 

리틀 엔디언 & 빅 엔디언 (좀 더 자세히 ARABOJA)

빅엔디언은 데이터를 순서대로 저장시킨다. 그러므로, 사람이 보기에는 직관적이라는 장점이 있다.

대형 UNIX 서버에 사용되는 RISC 계열의 CPU에서 많이 사용된다. 네트워크 프로토콜에도 사용된다.

따라서 애플리케이션 개발에 데이터를 네트워크로 송수신하게 되면 이러한 점을 고려해야한다.

 

리틀엔디언은 주로 Intel X86 CPU에서 많이 사용된다. 그래서 Windows계열 리버싱을 할 때에는 리틀 엔디언도 익숙해져야 한다. 리틀엔디언은 데이터를 역순으로 저장시켜 산술 연산과 데이터의 타입이 확장/축소 될때 효율적이라는 장점이 있다.

 

좀 더 자세히 알아보자.

 

빌드하고 리버싱해보자.

 

어셈블리 코드를 해석하여 comment에 주석을 달았다.

메모리 덤프에서 각각의 값들을 확인해보겠다.

리틀 엔디언방식으로 바이트 오더링이 됨을 확인할 수 있다.

 

 

 

 

익숙하지는 않지만, 계속 공부를 하여 익숙해지도록 노력해야겠다.

'공부 > 리버싱핵심원리' 카테고리의 다른 글

6장 abex' crackme #1 - 책의 풀이  (0) 2020.12.01
6장 abex' crackme #1 - 나의 풀이  (0) 2020.11.30
5장 스택  (0) 2020.11.30
4장 IA-32 Register  (0) 2020.11.30
2장 Hello, World! 리버싱  (0) 2020.11.28