메모리 4

메모리 vs 레지스터 (메모리가 있는데 레지스터 왜 또 쓸까?)

우선 메모리나 레지스터의 사용목적은 같다. 컴퓨터에 데이터를 저장하기위해 이건 머리에 박아놔야한다. 다만 좀 더 빠르고 효율적으로 데이터를 저장하고 사용하기위해 레지스터를 사용하는 것이고, 이에 대해 이론적으로 구체적으로 알고싶으면 컴퓨터구조 내지는 운영체제 과목의 메모리 계층(Memory Hierarchy) 개념을 공부하면 된다. 이 글은 포너블 내지는 프로그램 동적 디버깅을 할때 메모리랑 레지스터 헷갈리지 않기위해 적는 글이다. 우선 알아두면 좋을 전제들이 몇개있다. 1. 프로그램에서 데이터를 다루는 주체는 CPU이다. (따라서 프로그램 명령어. 그러니까 어셈블리어에 있는 데이터들은 다 CPU가 다루는거다.) 2. CPU가 데이터를 사용하기위해선 무조건 레지스터로 옮겨와야한다. (push / pop은..

공부/JUN STUDY 2022.03.30

컴퓨터의 주소표현 (포인터의 크기 & 표현가능한 메모리 주소가 크면 좋은 이유)

컴퓨터의 주소개념을 이해할때 헷갈리는 가장 큰 이유는 개인적으로 주소를 나타내는 방법도 "숫자"이고 안에 들어가는 값도 "숫자"이기 때문이라고 생각한다. 무슨 말이냐면, 우선 어떤 호텔이 있다고 생각해보자. 이 호텔은 101호부터 503호까지 있는 5층짜리 호텔이다. 자, 이 호텔이 만약 101호부터 1003호까지 있는 10층짜리 호텔이면, 당연히 손님을 많이 받을 수 있을 것이다. 결론부터 이야기하면 컴퓨터에서 표현가능한 메모리 주소가 커지면 좋은이유는 호텔이 커지면(방을 많이 가지면) 손님을 더 많이 받을 수 있는 이유와 같다. 아니 방이 많으면 당연히 많은 손님들을 받을 수 있지 않을까? 어려운 논리가 전혀아니다. 컴퓨터도 표현가능한 주소가 많아질수록, 당연히 넣을 수 있는 데이터가 많아진다. 이게..

공부/JUN STUDY 2022.03.30

FSB(Format String Bug) %n %hn %hhn 으로 숫자 입력시 메모리 상태

FSB 문제를 풀때에 한번에 4바이트를 %n을 통해 입력하게되면 너무 많은 값들을 출력하며 TIMEOUT이 발생할 수 있다. 그래서 %hn을 이용해 2바이트씩 나누어서 전송하게 되는데, 이때 기억해두면 좋을 사항들이 있다. %hn을 입력할때. 해당 위치를 기준으로 큰 주소 값으로 입력된다. (ex. $exit_got+0에 입력시 $exit_got+0, $exit_got+1에 입력됨) 리틀엔디안으로의 숫자 입력이니 숫자의 낮은 자릿수 부분이 낮은 주소에 입력된다.

CTF 2022.02.09
728x90