Reverse Engineering에 대하여.. (Computer Architecture , Windows Memory Layout)

화승이·2022년 4월 4일
0

리버싱 공부

목록 보기
2/2
  • 배경
    컴퓨터 구조 중에서 특히 CPU가 사용하는 명령어와 관련된 설계를 명령어 집합구조(Instruction Set Architecture, ISA)

Computer Architecture

컴퓨터 구조(Computer Architetcure)

  • 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법을 말한다.

1) 컴퓨터 기능 구조

‘컴퓨터의 기능 구조에 대한 설계’ 란?
컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야입니다.

  • ex) 폰 노이만 구조, 하버드 구조, 수정된 하버드 구조

2) CPU의 명령에 대한 설계

'명령어 집합구조'란?
CPU까 처리해야하는 명령어를 설계하는 분야

  • ex) ARM, MIPS, AVR, 인텔의 x86 및 x86-64

3) CPU의 하드웨어적 설계

'마이크로 아키텍처'란?
정의된 명령어집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야

https://velog.io/@ckstn0777/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0
위 자료에서 폰 노이만 구조와 하버드 구조의 장단점을 파악할 수 있음. !!

폰 노이만 구조

  • 배경
    초기 컴퓨터 과학자 중 한명인 폰 노이만은 컴퓨터에 연산, 제어, 저장의 세 가지 핵심 기능이 필요하다고 생각하였다.
    근대의 컴퓨터는 연산과 제어를 위해 중앙처리장치(Central Processing Unit, CPU)를, 저장을 위해 기억장치(memory)를 사용합니다. 그리고 장치간에 데이터나 제어 신호를 교환할 수 있도록 버스(bus)라는 전자 통로를 사용합니다.

1) 중앙처리장치 CPU
CPU는 프로그램의 연산을 처리하고 시스템을 제어하는 컴퓨터의 두뇌!
프로세스의 코드를 불러오고, 실행하고, 결과를 저장하는 일련의 모든 과정이 CPU에서 일어난다. CPU는 산술/논리 연산을 처리하는 산술논리장치(Arithmetic Logic Unit, ALU)와 CPU를 제어하는 제어장치(Control Unit), CPU에 필요한 데이터를 저장하는 레지스터(Register) 등으로 구성된다.

2) 기억장치
기억장치는 컴퓨터가 동작하는데 필요한 여러 데이터를 저장하기 위해 사용되며, 용도에 따라 주기억장치와 보조기억장치로 분류된다. 주기억장치는 프로그램 실행과정에서 필요한 데이터들을 임시로 저장하기 위해 사용되며, 대표적으로 램(Random-Access Memory, RAM)이 있다. 이와 반대로 보조기억장치는 운영 체제, 프로그램 등과 같은 데이터를 장기간 보관하고자 할 때 사용됩니다. 대표적으로 하드드라이브(Hard Disk Drive, HDD), SSD(Solid State Drive)가 있다.

3) 버스

버스는 컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로를 말한다. 대표적으로 데이터가 이동하는 데이터 버스(Data Bus), 주소를 지정하는 주소 버스(Address Bus), 읽기/쓰기를 제어하는 제어 버스(Control Bus)가 있습니다. 이 외에도 랜선이나 데이터 전송을 목적으로 하는 소프트웨어, 프로토콜 등도 버스라고 불립니다.

명령어 집합구조

명령어 집합 구조(Instruction Set Architecture, ISA)란?
CPU가 해석하는 명령어의 집합을 의미함. 프로그램의 코드는 기계어로 작성되어 있는데, 프로그램을 실행하면 이 명령어들을 CPU가 읽고, 처리함.

x86-64 아키텍처

  • 인텔의 64비트 CPU 아키텍처
    인텔의 32비트 CPU 아키텍처인 IA-32를 64비트 환경에서 사용할 수 있도록 확장한 것으로, 대다수의 개인용 컴퓨터들이 인텔의 x64 CPU를 사용. 요즘 시장에서 가장 점유율이 높음.

n 비트 아키텍처란?
‘64비트 아키텍처', '32비트 아키텍처’에서 64와 32는 CPU가 한번에 처리할 수 있는 데이터의 크기
컴퓨터과학에서는 이를 CPU가 이해할 수 있는 데이터의 단위라는 의미에서 WORD라고 부른다.

범용 레지스터(General Register): 주 용도는 있으나, 그 외의 용도로도 자유롭게 사용할 수 있는 레지스터. x64에는 rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp, r8-r15가 있다.

세그먼트 레지스터(Segment Register): 과거에는 메모리 세그먼테이션이나, 가용 메모리 공간의 확장을 위해 사용했으나, 현재는 주로 메모리 보호를 위해 사용되는 레지스터이다. x64에는 cs, ss, ds, es, fs, gs가 있다.

플래그 레지스터(Flag Register): CPU의 상태를 저장하는 레지스터

명령어 포인터 레지스터(Instruction Pointer Register, IP): CPU가 실행해야할 코드를 가리키는 레지스터. x64에서는 rip가 있다.


Windows Memory Layout

  • 메모리 레이아웃(Memory Layout)이란?
    프로세스 가상 메모리(Virtual Memory)의 구성, 프로그램을 실행하면 운영체제는 프로세스에게 사용 가능한 메모리 공간을 할당한다. 컴퓨터 과학에서는 이 공간을 가상 메모리라고 부른다.

섹션

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

PE 헤더에 저장되는 섹션과 관련된 데이터 중 중요한 것

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

1) .text

  • 실행 가능한 기계 코드가 위치하는 영역, 읽기/ 실행 권한 부여

2) .data

  • 컴파일 시점에 값이 정해진 전역 변수, 읽기/쓰기 권한이 부여된다.

3) .rdata

  • 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL 및 외부 함수들의 정보가 저장, 읽기 권한 O, 쓰기 권한 X

메모리

1) 스택

  • 보통 지역변수나 함수의 리턴 주소 저장, 읽기/쓰기 권한이 부여됨.

2) 힙

  • 프로그램이 여러 용도로 사용하기 위해 할당받는 공간, 모든 종류의 데이터가 저장 가능
profile
이제부터 하고싶은것만 하면서 살거야

0개의 댓글