바이트 오더링
바이트 오더링은 데이터 저장방식을 말한다.
바이트 오더링은 크게 두가지 방식이 존재하는데 빅 엔디언(Big Endian)과 리틀 엔디언(Little Endian)이다.
빅 엔디언은 UNIX 서버에 사용되는 RISC 계열의 CPU에서 사용된다. 또한 네트워크 프로토콜에서도 빅 엔디언이 사용된다.
리틀 엔디언은 Intel x86-x64 CPU에서 사용된다.
간단 예제
BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abcde";
TYPE | Name | SIZE | Big Endian | Little Endian |
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] |
디버깅을 통한 리틀 엔디언 확인
#include "windows.h" BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abcde"; int main(int argc, char *argv[]) { BYTE lb = b; WORD lw = w; DWORD ldw = dw; char *lstr = str; return 0; }
위 코드를 빌드 후 ollyDbg를 이용하여 분석하였다.
main() 함수로 이동하여 전역변수의 주소를 확인 후 살펴 보았다.