Register

2024. 8. 16. 20:19·CS/Computer Architecture
728x90
반응형

General-Purpose register

여러가지 목적이나 용도로 사용하는 레지스터
  • 프로그래머가 자유롭게 조작 할 수 있음
  • 일종의 변수라고 생각할 수 있음
  • 인텔의 공식 문서에 따르면 32비트의 시스템의 경우 8개가 존재
  • 인텔의 공식 문서에 따르면 64비트의 시스템의 경우 16개가 존재
  • 용도나 목적이 정해져있지 않음 (그렇지만 일반적으로 어떠할 때 사용한다는 것은 존재함)

범용 레지스터
64비트 아키텍쳐의 범용 레지스터

* RAX, RBX, RCX, RDX 2byte 중 상위 1byte에 접근할 수 있음

더보기

[ 범용 레지스터의 용도/목적 ] 실질적으로 정해져있는 것은 아니지만 주로 사용함

EAX : 피연산자와 연산 결과의 저장소

EBX : data segment 안의 데이터를 가리키는 포인터

ECX : 문자열 처리나 루프를 위한 카운터

EDX : I/O 포인터

ESI : data segment내의 어느 데이터를 가리키는 포인터 / 문자열 처리에서 src를 가리킴

EDI : data segment내의 어느 데이터를 가리키는 포인터 / 문자열 처리에서 dst를 가리킴

ESP : stack segment의 맨 꼭대기를 가리키는 포인터

EBP : stack의 한 데이터를 가리키는 포인터 (현재 스택 포인터의 베이스 주소 등)

Segment register

세그먼트 레지스터

한 바이너리(실행 파일)의 base 주소를 가리키는 역할을 하는 레지스터

프로그램이 실행되면 비어있는 메모리 아무 곳에나 각각의 레지스터를 빈 공간 아무곳에나 놓는다.

모든 세그먼트는 흩어지게 되며, 우리가 살펴볼 때는 가상 메모리라는 개념을 사용하기에 이를 인지하지 못한다.

흩어진 세그먼트의 base를 저장해야, 해당 바이너리의 메모리를 사용할 수 있는데 이 base를 저장해주는 곳이 Segment register이다

 

Segment Register와 Memory sapce (page의 크기)

32비트 프로그램을 가정하자

32비트 프로그램이라는 뜻은 한번에 처리할 수 있는 명령어의 크기가 32비트이자, 메모리 공간을 표현할 수 있는 크기가 최대 32비트

이 32비트에 맞춰 page 크기를 계산한다. 

즉, 한 page는 \(2^{32}\)가 됨

Program status and control register (FLAG register)

플래그 레지스터

플래그 레지스터는 플래그를 설정하는 명령어들이 실행 된 이후, 어떤 값을 확인할 수 있도록 해줌

중요한 것은 4가지가 있다

  • CF(Carrry Flag) : 연산을 수행하면서 carry 혹은 borrow 가 발생하면 1이 됨
  • ZF(Zero Flag) : 결과가 zero (보통 xor 연산 혹은 if와 같은 조건문)
  • SF(Sign Flag) : 음수일 때 설정됨 - 연산 결과의 최상위 비트 값과 같음
  • OF(Overflow flag) : 오버플로우가 발생한 경우

CF vs OF

OF는 "부호의 반전이 있을 때" 설정된다고 생각하면 간단하다

mov al, 0xff
add al, 1

자리 올림이 발생하고 0이 된다

> CF, ZF가 설정됨

1바이트 공간을 초과하니 overflow라고 생각할 수 있지만, 부호 반전이 없기 때문에 OF는 설정되지 않는다

mov al, 0x7f
add al, 1

0x7f(127) -> 0x80(-128)이 된다

> SF, OF가 설정됨

부호 반전이 일어나기 때문에 OF가 설정되지만, 자리 올림/빌림이 발생하지 않아 CF가 설정되지 않음

Instruction Pointer

다음에 실행할 명령어 주소를 저장하는 레지스터

x86에서는 EIP, x64에서는 RIP를 사용함

* 시스템 해킹의 주요 목표는 명령 포인터를 조작하는 것 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'CS > Computer Architecture' 카테고리의 다른 글

[Assembly] 데이터 이동  (0) 2024.09.20
Static Link vs Dynamic Link  (0) 2024.09.05
함수의 프롤로그 & 에필로그  (0) 2024.08.22
[Assembly] Intel vs AT&T  (2) 2024.08.14
Hardware Architecture - Single Processor  (2) 2024.07.01
'CS/Computer Architecture' 카테고리의 다른 글
  • Static Link vs Dynamic Link
  • 함수의 프롤로그 & 에필로그
  • [Assembly] Intel vs AT&T
  • Hardware Architecture - Single Processor
min_zu
min_zu
  • min_zu
    민주제도
    min_zu
  • 전체
    오늘
    어제
    • ._. (176)
      • AI (2)
        • DeepLearning (2)
        • CS231n (0)
      • Web (2)
        • ReactJS (0)
      • CS (83)
        • OS (7)
        • Data Structure (23)
        • Computer Architecture (8)
        • Computer Network (20)
        • Algorithm (25)
      • Linux (3)
        • KaliLinux (0)
        • Docker (1)
      • Hacking (83)
        • Write Up (25)
        • Pwnable (13)
        • Reversing (2)
        • Cryptography (12)
        • Web Hacking (4)
        • Window (6)
        • Network (7)
        • Web3 (13)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Sort
    Graph
    OS
    Mac
    Linux
    UTM
    ComputerArchitecture
    Tree
    Web
    AI
    DataStructure
    DeepLearning
    Search
    WinAFL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
min_zu
Register
상단으로

티스토리툴바