진법
- 10진수 decimal -> 0~9로 표현
- 2진수 binary -> 0,1로 표현
- 16진수 hexa decimal -> 0~9 , A~F 로 표현 ( 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)이 순서로 총 16개
- 예시) 16진수 41존재하고 이를 10진수로 변환해보자 => (4*16^1) + (1*16^0) = 64+1 = 65이며 만약 이를 출력하고자 한다면 아스키코드 65값인 A가 출력됨
| 2진수 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
| 16진수 | 3 | C | ||||||
| 10진수 | 60 | |||||||
비트와 바이트
- 1bit => 2가지의 경우의 수 표현
- 1byte ( 8bit ) => 2^8이며 즉 256가지의 경우의 수 표현 => 메모리에 저장되는 최소 단위임. => deciaml로는 0~255이며 binary로는 00,000,000~11,111,111이며 dexa deciamal로는 00~FF이다.
최상위 비트 MSB ( most significant bit ) : 가장 왼쪽에 있는 비트
최하위 비트 LSB ( least significant bit ) : 가장 오른쪽에 있는 비트
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
| MSB | LSB | ||||||
if (부호가 있는 데이터) => MSB는 부호의 의미를 가짐 => 0이면 양수 , 1이면 음수
부호가 있는 데이터 = signed data
부호가 x 데이터 => unsigned data
10,010,100이 signed data이면 (-128+16+4) = -108
10,010,100이 unsigned data이면 (128+16+4) = 148
바이트 오더링
- 2 byte이상 데이터는 메모리에 연속적으로 저장되며 이때 각 byte가 메모리에 저장 되는 방식을 의미
- 문자열은 메모리에 저장할때 바이트 오더링을 고려하지 않는다. 즉, 문자 순서 그대로 저장된다.
- 문자열은 일반적으로 각 문자가 독립적인 바이트 단위로 저장되기 때문에 바이트 오더링의 영향을 받지 않음
- 빅 엔디안과 리틀 엔디안으로 나뉨.
- Big Endian : 큰 byte먼저 낮은 주소에 저장 ( 첫번째 표). 주로 네트워크 상 or SPARC CPU
- Little Endian : 작은 byte먼저 낮은 주소에 저장 ( 두번째 표).. 주로 x86 , x86-64 CPU. 즉, 대다수 컴퓨터에서 해당 방식 사용
| Memory Addr | 0x100 | 0x101 | 0x102 | 0x103 |
| hexa deciamal | 0x11 | 0x23 | 0x45 | 0x67 |
| binary | 0001 0001 | 0010 0011 | 0100 0101 | 0110 0111 |
| Memory Addr | 0x100 | 0x101 | 0x102 | 0x103 |
| hexa decimal | 0x67 | 0x55 | 0x32 | 0x10 |
| binary | 0110 0111 | 0101 0101 | 0011 0010 | 0001 0000 |
AGDB는 0x41 0x47 0x44 0x42 로 저장됨. 아래 예시는 각각의 독립된 공간에 저장됨울 보여줌
- 0x555555556004: 0x41 ('A')
- 0x555555556005: 0x47 ('G')
- 0x555555556006: 0x44 ('D')
- 0x555555556007: 0x42 ('B')
리틀 엔디안 예시
- 0x7fffffffe317: 0x44 (가장 높은 바이트)
- 0x7fffffffe316: 0x43
- 0x7fffffffe315: 0x42
- 0x7fffffffe314: 0x41 (가장 낮은 바이트)
- 리틀 엔디안 해석: 0x44434241
빅 엔디안 예시
- 0x7fffffffe314: 0x44 (가장 높은 바이트)
- 0x7fffffffe315: 0x43
- 0x7fffffffe316: 0x42
- 0x7fffffffe317: 0x41 (가장 낮은 바이트)
- 빅 엔디안 해석: 0x44434241
'보안_기타' 카테고리의 다른 글
| caesar cipher , cipher wheel , brute forece를 이용한 caesar 복호화, 열 전치 암호 (0) | 2024.08.05 |
|---|---|
| 레지스터 및 어셈블리 기초 (0) | 2024.08.03 |
| NOP_seld , ASLR , FRP , NX bit , RTL (1) | 2024.08.02 |
| multiple stack (0) | 2024.07.30 |
| 비트 연산 , 인코딩 , 디코딩 (0) | 2024.07.27 |