C언어에서 int형의 자료형을 초과하는 연산을 하면 원하는 값을 얻을 수는 없지만 교환법칙과 분배 법칙이 성립하든 연산 순서를 바꿔도 원하는 결과는 아니지만 항상 동일한 결과 값을 가져온다.
(500 400) (300 200)
((500 400) (300) 200)
(200 500) 300) 400)
400 (200 (300 500))
많은 컴퓨터 보안 취약성은 컴퓨터 연산의 취약성에서 생겨났다.
컴퓨터들은 메모리에서 주소지정이 가능한 최소 단위인 8비트 1byte 단위의 블록인 바이트를 사용한다.
프로그램은 메모리를 가상메모리라고 하는 거대한 바이트의 배열로 취급하고, 메모리의 각 byte는 메모리라고 하는 고유한 숫자로 식별할 수 있다.
C에서 어떤 포인터의 값은 정수, 구조체, 다른 프로그램 객체 등 유형에 관계없이 저장장치의 동일한 블록의 첫 바이트의 가상주소가 된다.
메모리와 관련된 2진수를 그나마 편하게 읽으려고 16진법으로 표시를 함.
데이터 크기 (Data Sizes)
워드 크기(word size)는 포인터와 주소의 크기를 결정함.
32비트 시스템: 최대 주소 공간 = 4GB
64비트 시스템: 최대 주소 공간 = 16 Exabytes
C에서 데이터 타입의 일반 크기 (x86-64 기준):
char: 1 byte
short: 2 bytes
int: 4 bytes
long: 8 bytes
float 4 bytes
double 8 bytes
포인터: 8 bytes (64-bit 시스템 기준)
C언어는 type 선언이 다양
unsigned long
unsigned long int
long unsigned
long unsigned int
바이트 순서 (Endianness)
Little Endian: 하위 바이트부터 저장 (Intel x86의 기본)
Big Endian: 상위 바이트부터 저장 (네트워크 등 일부 시스템)예: 0x12345678 저장 시
Little endian: 78 56 34 12
Big endian: 12 34 56 78
OS별 인스트럭션 인코딩이 다르다
이진수 값 1과 0을 논리값 TRUE와 FALSE로 인코딩하면 논리 추론의 기본 원리들을 구현할 수 있는 대수학을 수식화 할 수 있다는 점을 발견
문자열, 코드, 불 대수, C의 비트 연산
문자열은 null 문자(0x00)로 끝나는 char[] 형태로 저장
C의 비트 연산자: &, |, ^, ~, <<, >> 등
불 대수는 비트 연산의 수학적 기반 제공
부울 대수의 기본 요소:
| A | B | A AND B | A OR B | NOT A |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 |
.
| A | B | A ⊕ B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
.
|구분|Bool |Boolean Ring|
|------|---|---|
|덧셈|OR (A + B)|XOR (A ⊕ B)|
|곱셈|AND (A ⋅ B)|AND (A ⋅ B)|
|응용|디지털 회로, 프로그래밍|암호, 형식 수학, 추상대수학|
부울 대수는 전기 회로를,
부울환은 수학적 논리 퍼즐을 더 잘 다룰 수 있게 만들어진 개념
Bool ring은 mod 2의 이진수 덧셈을 기반으로 만들어 졌기 때문에 XOR 연산
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 0 (mod 2)
이를 화면에서 색표현에도 씀
| 색 | (rgb)비트 | 보수(bitwise NOT) | 보수 색 |
|---|---|---|---|
| Black | 000 | 111 | White |
| Blue | 001 | 110 | Yellow |
| Green | 010 | 101 | Magenta |
| Cyan | 011 | 100 | Red |
| Red | 100 | 011 | Cyan |
| Magenta | 101 | 010 | Green |
| Yellow | 110 | 001 | Blue |
| White | 111 | 000 | Black |
| = OR
& = and
^ = XOR
CSAPP 날로 먹기