[TIL] CSAPP 2.1 키워드

zxcv·2025년 5월 23일

2.1 정보의 저장

C언어에서 int형의 자료형을 초과하는 연산을 하면 원하는 값을 얻을 수는 없지만 교환법칙과 분배 법칙이 성립하든 연산 순서를 바꿔도 원하는 결과는 아니지만 항상 동일한 결과 값을 가져온다.

(500 400) (300 200)
((500
400) (300) 200)
(200 500) 300) 400)
400
(200 (300 500))

위 4가지 수식은 모두 같은 결과 값을 출력함

많은 컴퓨터 보안 취약성은 컴퓨터 연산의 취약성에서 생겨났다.

컴퓨터들은 메모리에서 주소지정이 가능한 최소 단위인 8비트 1byte 단위의 블록인 바이트를 사용한다.

프로그램은 메모리를 가상메모리라고 하는 거대한 바이트의 배열로 취급하고, 메모리의 각 byte는 메모리라고 하는 고유한 숫자로 식별할 수 있다.

C에서 어떤 포인터의 값은 정수, 구조체, 다른 프로그램 객체 등 유형에 관계없이 저장장치의 동일한 블록의 첫 바이트의 가상주소가 된다.

메모리와 관련된 2진수를 그나마 편하게 읽으려고 16진법으로 표시를 함.

2.1.2 데이터 크기

데이터 크기 (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의 비트 연산자: &, |, ^, ~, <<, >> 등
불 대수는 비트 연산의 수학적 기반 제공

부울 대수의 기본 요소:

ABA AND BA OR BNOT A
00001
01011
10010
11110

.

ABA ⊕ B
000
011
101
110

.
|구분|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)보수 색
Black000111White
Blue001110Yellow
Green010101Magenta
Cyan011100Red
Red100011Cyan
Magenta101010Green
Yellow110001Blue
White111000Black

| = OR
& = and
^ = XOR

profile
일단함

4개의 댓글

comment-user-thumbnail
2025년 5월 23일

CSAPP 날로 먹기

답글 달기
comment-user-thumbnail
2025년 5월 23일

우와 험난한 CSApp의 길을 밝혀주실 구원자

1개의 답글