Krafton_Jungle/Study

Krafton_jungle 5기 19일차 TIL - CSAPP

전낙타 2024. 4. 6. 00:27

CSAPP

 

데이터의 형식

C declaration Intel data type Assembly-code suffix Size
char Byte b 1
short Word w 2
int Double word l 4
long Quad word q 8
char * Quad word q 8
float Single precision s 4
double Double precision l 8

이 내용은 인텔 레지스터에 자주 사용되는 단위임으로 Assembly-code suffix는 모두 외우고 있는게 좋다.

 

정보 접근하기

정수 레지스터의 종류

정수 레지스터 중첩된 상자들이 보여주듯이 인스트럭션들은 16개의 레지스터 하위 바이트들에 저장된 다양한 크기의 데이터에 대해 연산할 수 있다.
역할 스택을 관리하고, 함수의 인자를 넘겨주고, 함수에서 값을 리턴하고, 로컬데이터와 임시 데이터를 저장하기 위해 사용된다.
오퍼랜드 식별자 연산을 수행할 소스값과 그 결과를 저장할 목적지의 위치를 명시한다.
식별자 타입 immediate - 상수값을 말한다. $기호 다음에 C표준 서식을 사용해서 표현
register - 레지스터의 내용을 말함.
effective address - 메모리 주소가 저장되어 있는 부분을 명시
데이터 이동 인스트럭션 movb, movw, movl, movq 네개의 인스트럭션 모두는 값을 옮기는 역할을 하는데, 여기서 뒤에 붙는 접미사는 아까 위에서 봤던 byte의 단위이다. 해당 byte 단위에 유효한 데이터만 옮길 수 있다.
스택 데이터의 저장과 추출 스택은 기본적으로 선입선출의 구조를 띈다. 스택은 아래 방향으로 성장하며, 스택의 바닥을 가르키는 rbp와 프로시저를 call할때 스택의 현재 위치를 저장하는 rsp가 있음

 

산술 연산과 논리 연산

유효 주소 적재 유효 주소 적재 인스트럭션 leaq로 사용하며 movq 인스트럭션의 변형.
메모리에서 레지스터로 읽어들이는 인스트럭션의 형태를 갖지만, 메모리를 전혀 참조하지 않는다.
유효주소를 목적지에 복사한다는 방식은 마치 포인터를 연상시켰음
기타 연산 당항 및 이항 연산과 쉬프트 연산 또한 가능하다.
n의 n승을 계산할때 해당 방법을 사용할것으로 추정

 

 

프로시저

스택 프레임 구조

프로시저란? 또 추상화된 개념이다. 함수와 비슷하다고 생각되나, 함수처럼 직접적인 계산을 의미하는 것이 아닌, 함수, 메소드, 서브루틴, 핸들러 등으로 구성된 작업을 의미하는 것 같다.
런타임 스택 스택 자료구조가 제공하는 후입 선출 메모리 관리 방식을 활용함.
함수를 call하면 스택에 차곡차곡 쌓이는 방식으로 작동한다.
제어의 이동 다른 프로시저를 call하고 그 값을 return 받는 방식은 아래 사진과 같다.

 

 

 

드디어 어셈블리어와 첫 대면을 끝냈다.

어셈블리와의 사투의 흔적