본문 바로가기

드림핵

[드림핵 Reverse Engineering] Stage 3


[Stage 3] Computer Architecture

#컴퓨터구조 #명령어집합구조 #인텔x86-64

 

- 컴퓨터 구조(Computer Architecture) : 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법

    > 컴퓨터의 기능 구조에 대한 설계 : 컴퓨터가 연산을 효율적으로 하기 위해 컴퓨터에 필요한 기능 설계

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

    > 명령어 집합구조(Instruction Set Architecture, ISA) : CPU가 처리해야하는 명령어 설계

        ex. 인텔 x86, x86-64, ARM, MIPS, AVR 등

    > 마이크로 아키텍처(Micro Architecture) : CPU의 회로(하드웨어적) 설계

        ex. 캐시 설계, 파이프라이닝, 슈퍼 스칼라, 분기 예측, 비순차적 명령어 처리

    > 기타 하드웨어 및 컴퓨팅 방법에 대한 설계

        ex. 직접 메모리 접근

 

- 폰 노이만 구조

    > 연산과 제어 : 중앙처리장치(Central Processing Unit, CPU)

        구성 : 산술논리장치(Arithmetic Logic Unit, ALU) 산술/논리 연산, 제어장치(Control Unit) CPU 제어, 레지스터(Register) CPU에 필요한 데이터 저장

    > 저장 : 기억장치(memory)

        분류 : 주기억장치(RAM), 보조기억장치(HDD, SSD)

    > 제어 신호 교환 : 버스(bus)

        종류 : 데이터 버스(Data Bus), 주소 버스(Address Bus), 제어 버스(Control Bus)

 

- 명령어 집합 구조

    > 인텔 x86-64 : 고성능 프로세서를 설계하기 위해 사용. CPU가 많은 전력 소모. 발열이 심한 편. 데스크톱 또는 랩톱에 적합.

    > ARM, MIPS, AVR 등 : 전력 소모와 발열이 적음. 크기가 작은 임베디드 기기에 적합.

 

- x86-64(Intel64, IA-32e, EM64T, amd64) 아키텍처 : AMD가 인텔과 라이센스 공유 협약을 맺어 개발한, x86과 호환되는 64비트 아키텍처

    > n 비트 아키텍처 : n은 CPU가 한번에 처리할 수 있는 데이터의 크기

    > WORD : CPU가 이해할 수 있는 데이터의 단위(32, 64). WORD가 크면 메모리 자원 부족으로 성능이 나빠지거나 소프트웨어를 실행 할 수 없는 상황이 거의 발생하지 않음.

    > 레지스터 : CPU 내부의 저장장치

        [범용 레지스터] : 주용도는 있으나, 그 외 임의의 용도로도 사용 가능. x86-64에서 8byte 저장 가능. 레지스터 RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP.

        [세그먼트 레지스터] : cs, ss, ds, es, fs, gs 6가지 존재. 레지스터의 크기는 16bit. 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되거나 범용적인 용도로 사용됨. 현재는 주로 메모리 보호를 위해 사용됨.

        [명령어 포인터 레지스터] : CPU가 실행할 코드를 가리킴. 레지스터 RIP. 크기는 8byte.

        [플래그 레지스터] : 프로세서의 현재 상태를 저장. 플래그 비트 CF(Carry Flag), ZF(Zero Flag), SF(Sign Flag), OF(Overflow Flag)

    > 레지스터 호환 : x86-64 아키텍처는 IA-32의 64비트 확장 아키텍처로, 호환 가능. IA-32의 레지스터 EAX, EBX, ECX, EDX, ESI< EDI, ESP, EBP는 x86-64에서도 호환됨.(하위 32비트) 

 

 


[Stage3] Windows Memory Layout

#메모리레이아웃 #윈도우프로세스

 

- 메모리 레이아웃(Memory Layout) : 프로세스의 가상 메모리(Virtual Memory)의 구성

    > 가상 메모리 : 프로그램을 실행했을 때 운영체제가 프로세스에 할당해주는 메모리 공간

 

- 프로세스 메모리 구조

    > 섹션 : 윈도우 PE 파일의 구성 요소 중 하나. 유사한 용도로 사용되는 데이터가 모여있는 영역. .text, .data, .rdata가 사용됨.

        [PE 헤더] : 섹션에 대한 정보. 섹션의 이름, 크기, 섹션이 로드될 주소의 오프셋, 섹션의 속성과 권한 등이 적혀있음.

        [.text 섹션] : 실행 가능한 기계 코드가 위치하는 영역. 읽기 권한, 실행 권한 부여.

        [.data 섹션] : 컴파일 시점에 값이 정해진 전역 변수 위치. 읽기 권한, 쓰기 권한 부여.

        [.rdata 섹션] : 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL 및 외부 함수들의 정보 위치. 읽기 권한 부여.

    > 섹션이 아닌 메모리

        [스택] : 보통 지역변수나 함수의 리턴 주소가 저장됨. 읽기 권한, 쓰기 권한 부여.

        [힙] : 프로그램이 여러 용도로 사용하기 위해 할당받는 공간. 읽기 권한, 쓰기 권한 (실행 권한) 부여.

            *스택 vs 힙

                힙은 비교적 스택보다 큰 데이터를 저장할 수 있고, 전역적으로 접근이 가능하며, 실행 중 동적으로 할당받음.