SECURITY/리버싱(역공학)
리버싱 3장
OnewayK
2015. 8. 20. 14:51
1. 바이트 오더링
- 데이터를 저장하는 방식을 의미
- 빅 엔디언(Big Endian)과 리틀 엔디언(Little Endian)으로 나뉨
1-1. 리틀 엔디언 & 빅 엔디언
BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abcde"; |
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] |
구분 | 빅 엔디언 |
리틀 엔디언 |
장점 | 사람이 보기에 직관적 |
산술 연산과 데이터의 타입이 확장/축소 될 때 더욱 효율적 |
주로 사용되는 곳 | 대형 UNIX 서버에 사용되는 RISC 계열의 CPU 네트워크 프로토콜 |
Intel x86 CPU |
특징 | 사람이 보는 방식과 동일하게 앞에서 부터 순차적으로 저장 |
- 데이터를 저장할 때 역순으로 저장 - 바이트 자체는 정상적인 순서로 저장 - 멀티바이트(multi-bytes)인 경우 각 바이트가 역순으로 저장 - str 문자열은 Endian 형식에 상관 없이 동일 (char 배열이므로 각 바이트를 연속해서 저장) |