ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02 - 컴퓨터 구조 / Window memory layout
    해킹/리버싱 이론 2024. 10. 6. 21:06

    컴퓨터 구조

    컴퓨터 구조 구성

    • 기능 구조의 설계
      • 폰 노이만 구조
      • 하버드 구조
      • 수정된 하버드 구조
    • 명령어 집합구조(Isntruction Set Architecture) - CPU의 명령어 설계, CPU가 해석하는 명령어의 집합
      • x86, x86-64
      • ARM
      • MIPS
      • AVR
    • 마이크로 아키텍처 - CPU의 하드웨어적 설계
      • 캐시 설계
      • 파이프라이닝
      • 슈퍼 스칼라
      • 분기 예측
      • 비순차적 명령어 처리
    • 하드웨어 및 컴퓨팅 방법론
      • 직접 메모리 접근

    폰 노이만 구조

     

    • 중앙처리장치 (CPU): 컴퓨터의 두뇌로, 프로그램의 연산과 시스템 제어를 담당합니다. 주요 구성 요소는 산술논리장치(ALU), 제어장치(Control Unit), 그리고 레지스터(Register)입니다.
    • 기억장치: 데이터를 저장하는 장치로, 주기억장치(RAM)는 프로그램 실행 중 필요한 데이터를 임시 저장하고, 보조기억장치(HDD, SSD)는 데이터를 장기간 보관합니다.
    • 버스: 컴퓨터 부품 간 신호를 전송하는 통로로, 데이터 버스(Data Bus), 주소 버스(Address Bus), 제어 버스(Control Bus) 등이 있습니다.

     

     

     

    x86-64 아키텍처

    레지스터

    • 범용 레지스터
      • 주용도는 있으나, 그 외 임의의 용도로도 사용될 수 있는 레지스터
    이름 주용도
    rax (accumulator register) 함수의 반환 값
    rbx (base register) x64에서는 주된 용도 없음
    rcx (counter register) 반복문의 반복 횟수, 각종 연산의 시행 횟수
    rdx (data register) x64에서는 주된 용도 없음
    rsi (source index) 데이터를 옮길 때 원본을 가리키는 포인터
    rdi (destination index) 데이터를 옮길 때 목적지를 가리키는 포인터
    rsp (stack pointer) 사용중인 스택의 위치를 가리키는 포인터
    rbp (stack base pointer) 스택의 바닥을 가리키는 포인터
    • 세그먼트 레지스터
      • x64아키텍처 기준 cs, ss, ds, es, fs, gs가 존재. 
    • 명령어 레지스터
      •  rip , 크기는 8byte 
      • 어느 부분의 코드를 실행할지 가리킴 
    • 플래그 레지스터
    플래그 의미
    CF(Carry Flag) 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정 됩니다.
    ZF(Zero Flag) 연산의 결과가 0일 경우 설정 됩니다.
    SF(Sign Flag) 연산의 결과가 음수일 경우 설정 됩니다.
    OF(Overflow Flag) 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 됩니다.

     

    레지스터 호환

    x86-64 아키텍처는 IA-32의 64비트 확장 아키텍처이다, 따라서 rax가 32비트 아키텍처의 확장된 형태이다

     

    Window memory layout

    프로세스 메모리구조

    Memory Layout이란 프로세스 가상 메모리 구성을 말함.

    윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되며 이 PE파일을 실행할 때 헤더를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑한다.

    섹션 : 유사한 용도로 사용되는 데이터가 모여있는 영역

    PE헤더에는 섹션에 관한 데이터가 적혀있음

    • 섹션의 이름
    • 섹션의 크기
    • 섹션이 로드될 주소의 오프셋
    • 섹션의 속성과 권한

    섹션

    • .text
      • 실행 가능한 기계 코드가 위치
      • 코드 실행을 위해 권한은 (r, x) (w는 코드 삽입의 위험으로 제거)
    • .data
      • 컴파일 시점에 값이 정해진 전역 변수들이 위치
      • CPU가 이 섹션의 데이터를 읽고 쓸 수 있어야 하므로 권한은 (r, w)
    • .rdata
      • 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL(동적 링크 라이브러리) 및 외부함수들의 정보
      • 권한 R만 부여
    char *str_ptr = "readonly";  // str_ptr은 .data, 문자열은 .rdata

    섹션이 아닌 메모리

    • 스택
      • 지역 변수, 함수의 리턴 주소
      • 읽기/쓰기 가능
      • 스택이 확장 될 때 기존 주소보다 낮은 주소로 확장됨.
      • 모든 종류의 데이터 저장 될 수 있음
      • 전역 접근 가능
      • 실행 중 동적으로 할당 받음
      • r,w 권한이지만 상황에 따라 x 도 가능

    '해킹 > 리버싱 이론' 카테고리의 다른 글

    IDA 사용법 및 문법  (0) 2024.10.07
    03 - x86 Assembly  (1) 2024.10.06
    01 - 리버싱  (2) 2024.10.06

    댓글

Designed by Tistory.