이론/buffer overflow_달고나bof

8086 CPU 레지스터 구조

O'bin 2022. 3. 29. 14:29

CPU가 프로세스 실행 위해선 프로세스를 CPU에 올려야 함

데이터 빠른 읽쓰 필요 -> CPU 내부 메모리(=register) 사용

 

register

1. General-Purpose register : 연산에 사용되는 피연산자, 주소계산 피연산자, 메모리 포인터 저장

2. Semgment register : code/data/stack segment 가리키는 주소

3. Program status and control register : 상태나 조건 검사 플래그

4. Instruction pointer : instruction(명령) 있는 메모리 상 주소

 

 

 

1. 범용 레지스터(General-Purpose register)

프로그래머 임의 조작 허용

AX 레지스터 상위 부분 : AH

        〃      하위 부분 : AL

 

register 목적

EAX – 피연산자, 연산 결과 저장소

EBX – DS segment안의 데이터를 가리키는 포인터

ECX – 문자열 처리나 루프를 위한 카운터 EDX – I/O 포인터

ESI – DS 레지스터가 가리키는 data segment 내의 어느 데이터를 가리키고 있는 포인터. 문자열 처리에서 source를 가리킴.

EDI – ES 레지스터가 가리키고 있는 data segment 내의 어느 데이터를 가리키는 포인터. 문자열 처리에서 destination을 가리킴.

ESP – SS 레지스터가 가리키는 stack segment의 맨 꼭대기 가리키는 포인터

EBP – SS 레지스터가 가리키는 스텍상의 한 데이터를 가리키는 포인터

 

 

 

2. 세그먼트 레지스터(Semgment register)

프로세스의 특정 세그먼트 가리키는 포인터 역할

=> 원하는 segment 안의 특정 데이터, 명령어 정확하게 꺼낼 수 있음

 

 

 

3. 플래그 레지스터(Program status and control register)

상태 flag, 컨트롤 flag, 시스템 flag들의 집합

 

 

 

4. Instruction pointer 레지스터

다음 실행할 명령어가 있는 현재 code segment의 offset 값 가짐

예) EIP 레지스터

 

 

'이론 > buffer overflow_달고나bof' 카테고리의 다른 글

프로그램 실행 시 Segment 에서는  (0) 2022.07.17
8086 Memory Architecture  (0) 2022.03.29