본문 바로가기

메모리

StackBasedOverflows-Windows-Part1 (기본 개념) 원본 : 번역본 : 제가 직접 번역을 해보았는데 오역이 있으면 알려주시기 바랍니다. (고등학교 때도 독해 안해봤는데 ... ㅋㅋㅋ 제가 이런걸 해볼줄이야 ... ㄷㄷ) 그리고 이걸 기본으로 해서 제가 다시 문서를 작서할 생각입니다. 더보기
메모리 계층(Memory Hierarchy) 메모리 종류 : 1. 메인(Main) 메모리 : 램(RAM) (D램) 2. 레지스터(Register) : CPU 안에 내장되어 있어서 연산을 위한 저장소 제공 3. 캐쉬(Cache) : S램. CPU와 램사이에서 중간 저장소 역할 4. 하드디스크(Hard Disk)와 이외 장치 : 하드 디스크, I/O 장치 등등 메모리 계층 구조(Memory Hierarchy) : 메모리들은 프로그램이 실행하는 동안 데이터의 입력 및 출력을 담당한다. 메모리들의 차이는 CPU 와의 거리에서 온다. CPU와의 거리가 가까울수록 빠르고 용량이 작으며 멀수록 느리고 용량이 크다.(기술과 돈의 문제) 하드디스크에 있는 내용은 프로그램의 실행을 위해 메인 메모리로 이동한다. 메인 메모리에 있는 일부 데이터도 실행을 위해 L2 캐.. 더보기
MMF(Memory Mapped File) 개념 : File 을 Memory 에 Mapping(연결) 가상 메모리 중 파일에 연결되어 있는 영역에 데이터를 저장한다. 이렇게 메모리에 저장된 데이터는 실제 파일에도 영향을 미친다. 즉, 데이터가 메모리뿐만 아니라 메모리에 연결된 파일에도 저장되는 것이다. 장점 : 1. 프로그래밍 편리 : 메모리상에 저장된 데이터를 조작하는 방식으로 파일 내 데이터를 조작할 수 있다. 2. 성능 향상 : 메모리는 중간에서 파일과 데이터의 캐쉬 역할을 하여 성능을 향상시킨다. MMF 구현 : 1. 파일 개방 : CreateFile() 2. 파일 연결 오브젝트 생성 : CreateFileMapping() HANDLE CreateFileMapping( HANDLE hFile, // 메모리에 연결할 파일의 핸들 LPSECU.. 더보기
라이브러리(Library) 라이브러리(Library) : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 파일을 의미한다. (참고 : 즉, 함수와 데이터들의 정의가 컴파일된 바이너리 코드로 라이브러리에 존재한다) (ex. C Run - Time Library Characteristics Libcmt.lib Multithreaded, static link Libcmtd.lib Multithreaded, static link (debug) Msvcrt.lib Multithreaded, dynamic link Msvcrtd.lib Multithreaded, dynamic link (debug)---d.lib : 디버그 모드로 컴파일) Static Library : 정적 라이브러리 개념 : 헤더파.. 더보기
함수 호출 과정 스택 프레임(Stack Frame) : 함수 호출시 할당되는 메모리 블록(지역변수의 선언으로 인해 할당되는 메모리 블록) 함수 호출이 완료되면(return) 기존에 선언된 지역변수에 접근이 불가능하다.(할당된 메모리가 반환되기 때문) (ex. fct1() 함수가 호출되면서 함수 내부에 선언된 변수 c, d 가 스택에 할당되는데 이 메모리 블록을 fct1() 함수의 스택 프레임이라 한다. fct1() 함수가 반환되면 스택 프레임도 반환된다.) SP 레지스터 : 스택 프레임을 가리키는 레지스터 sp 레지스터 값은 변수가 하나 하나씩 할당될 때마다 증가하면서 다음 변수가 할당될 메모리 위치를 가리킨다. 호출한 함수가 종료될 경우, 스택 프레임 단위로 sp 레지스터 값을 이동시켜야 한다. (함수 안에서 선언된 .. 더보기
프로세스의 생성과 소멸 프로세스(Process) : 메모리에 로드되어 실행중인 프로그램 1. 프로세스를 구성하는 요소 메모리 구조 : 프로세스 생성시 만들어진다. Register Set : 프로세스 실행을 위해 필요한 데이터들로 채워진다. 2. 프로세스의 스케줄링과 상태 변화 프로세스의 스케줄링(Scheduling) : 프로세스의 CPU 할당 순서 및 방법을 결정짓는 일 (스케줄링 알고리즘(Scheduling Algorithms) : 스케줄링에 사용되는 알고리즘) 스케줄러(Scheduler) : 스케줄링 알고리즘을 적용해서 실제로 프로세스를 관리하는 운영체제 요소(모듈) (참고 : 멀티 프로세스(Multi-Process) 운영체제의 CPU 사용 실행해야 할 프로세스 여러개라면 멀티 프로세스는 모든 프로세스를 일단 실행시킨 후 .. 더보기
어셈블리 디자인을 통한 컴퓨터 구조의 접근 1. 레지스터 디자인 고려 사항 : 레지스터 용량 레지스터 갯수 레지스터 각각의 용도 예) 레지스터 용량 : 16비트, 레지스터 갯수 : r0 ~ r7 (8개) 레지스터 용도 : r0 ~ r3 (저장용), r4(ir : instruction register), r5(sp : stack pointer), r6(lr : link register), r7(pc : program counter) (참고 : ir 은 다음번에 실행하게 될 명령어를 미리 가져다 놓는 용도로 사용된다) 2. 명령어 구조 디자인 명령어의 구조는 레지스터의 용량, 갯수, 용도에 종속적으로 구성될수 밖에 없다. (예 : 레지스터가 4개 일때와 8개 일때 명령어 내부에 레지스터를 표현해야할 비트수가 달라진다) 따라서 어셈블리 언어로 구현된 .. 더보기
시스템 프로그래밍(System Programming)의 시작 시스템 프로그램(System Program) : 컴퓨터 시스템을 동작시키거나 하드웨어를 사용할 수 있도록 도와주는 프로그램 1. 컴퓨터 시스템의 주요 구성요소(Main Components) 컴퓨터 구조(Computer Architecture) : CPU 캐쉬(Cache) ↕ 운영체제(Operating System) : 메인 메모리(Main Memory) 하드디스크(Hard Disk) 2. 컴퓨터 구조 : 1) CPU : 중앙처리장치(Central Processing Unit) ALU(Arithmetic Logic Unit) : CPU 내부에 실제 연산을 담당하는 부분. 산술연산(+, -)과 논리연산(AND, OR)을 수행 컨트롤 유닛(Control Unit) : CPU 내부로 들어온 명령어를 해석해서 A.. 더보기
메모리 패치(Memory Patch) 메모리 패치(Memory Patch) : 윈도우 운영체제가 사용중인 메모리 값들을 검색해서 원하는 값으로 변경을 하는 것 유명한 툴로는 티서치(Tsearch)와 치트엔진(Cheat Engine)이 있다. 티서치(Tsearch) : 1. 메모리 값 수정 2. 어셈코드를 추가해 넣는 코드인젝트(Code Inject) 3. 바이너리 수정(Hexedit) 4. 동적 메모리 할당(DMA) 방식의 메모리 값 수정 티서치를 이용하여 간단한 메모리 값 수정을 해보겠다. 그 외의 기능은 Help메뉴를 실행하면 제작자가 메뉴얼을 스샷과 예제 파일까지 포함시켜 쉽게 익힐 수 있다. 1. Open Process 2. 메모리의 특정 값 검색 3. 메모리 주소를 검색한 결과창 4. 메모리 주소의 값을 수정하는 곳 원하는 메모리 .. 더보기
스택과 콜링컨벤션의 이해 Function(1, 2)라고 선언이 된 함수가 사용된다면 push 2 push 1 call 004017E0 이와 같은 어셈블리 코드가 되는데, 파라미터는 뒤에서부터 push가 된다. 그 이유는 스택(stack)에 값을 순서대로 쌓아놓고, 나중에 쌓인 값을 우선으로 해 빼서 사용하기 때문이다. 일반적인 메모리 구조는 그림과 같다. 프로그램이 실행되기 위해서는 실행에 필요한 모든 것들이 메모리에 적재되어야만 한다. Text : 컴파일된 프로그램 소스가 기계어의 형태로 위치 Data : 프로그램에서 초기화된 데이터들의 위치 BSS : 초기화되지 않은 변수들의 위치. 항상 0으로 초기화됨 Stack : 지역변수, Command Line arguments 위치 Heap : 동적으로 할당된 변수들이 위치 Stac.. 더보기