1. 바이트 오더링
- 바이트 오더링( Byte Ordering) 이란 데이터가 저장되는 방식(순서)를 의미한다.
- 바이트 오더링 방식에는 크게 빅 엔디언(Big Endian) & 리틀 엔디언(Little Endian) 이 있다.
1.1 빅 엔디언(Big Endian)
- 빅 엔디언 방식은 데이터를 저장할 때 사람이 보는 방식과 동일하게 순차적으로 저장된다.
- 비교 연산시 높은 비트열을 먼저 비교하므로 유리하다.
- 연산속도가 리틀 엔디언 방식에 비해 느리다는 단점이 있다.
1.2 리틀 엔디언(Little Endian)
- 리틀 엔디언 방식은 데이터를 저장할 때 역순으로 저장된다.
- 낮은 비트열이 먼저 들어와서 연산이 바로 가능하다.
- 비교 연산을 할 때는 빅 엔디언에 비해 불리하다는 단점이 있다.
→ 위 사진과 같이 총 4개의 크기가 다른 자료형이 있을때 바이트 타입의 변수를 저장할 때는 두 방식의 차이가 없지만, 2바이트 이상의 크기를 가진 자료형을 저장할 때에는 각 엔디언의 방식에 따라 저장방식에 차이가 생긴다.
2. 디버거에서 리틀 엔디언 확인
- 실습파일 내 LittleEndian.exe 소스코드
//LittleEdnian.cpp
#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;
}
- 디버거로 실행했을때
- 40AC40 주소의 Dump Window
[40AC40] 주소에 12(byte)가 12 가 저장되있고
[40AC44] 주소에 1234(word)가 [34 12] 로
[40AC48] 주소에 12345678(dword)이 [78 56 34 12] 과 같이 리틀 엔디언 방식으로 저장되 있는것을 확인할 수 있다.
'Reverse Engineernig > study' 카테고리의 다른 글
[리버싱 핵심원리] ch05. 스택 (0) | 2022.12.27 |
---|---|
[리버싱 핵심원리] ch04. IA-32 Register 기본 설명 (0) | 2022.12.27 |
[리버싱 핵심원리] ch02. Hello World! 리버싱 (0) | 2022.12.26 |
[리버싱 핵심원리] ch01. 리버싱 스토리 (0) | 2022.12.26 |
[Assembly]어셈블리어 명령어 모음 (0) | 2022.06.08 |