ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 소프트웨어 역공학 3주자
    여러가지 공부 2022. 4. 18. 17:25

    레지스터 (Registers)

    - 빠른 연산을 위해 사용되는 레지스터 - 수행문잭, 제어정보, 데이터 임시 저장

    - 레지스터는 CPU에 내장된 저장 공간으로, CPU 아키텍처마다 다름

     

    REGISTERS IN X86

    범용 레지스터 (General Purpose Registers)

    - 범용 레지스터는 필요할 때마다 메모리 주소 또는 데이터에 사용되는 CPU에 있는 추가 레지스터입니다.예를 들어, 중단이 있을 때 현재 레지스터 내용을 저장합니다.

    - EAX, EBX, ECX, EDX

     

    포인터 (Pointers)

    - 포인터 어떠한 값을 저장하는 게 아닌 어떠한 값의 주소(Address)를 저장하는 것입니다.

    - ESI, EDI

     

    스택 포인터 (Stack Pointers)

    - 스택 포인터는 스택에 마지막 프로그램 요청의 주소를 저장하는 작은 레지스터입니다. 스택은 위에서 아래로 데이터를 저장하는 특수 버퍼입니다. 새로운 요청이 들어오면 이전 요청을 "푸시"합니다.

    - ESP: 스택의 맨 위를 가리킨다.

    - EBP: 현재 스택 프레임의 기준점을 가리킨다.

     

    특수 레지스터 (Special Registers)

    - 컴파일러에 의해 생성된 저장 영역의 이름을 지정하는 예약어입니다.

    - EIP: 지시 포인터

    - EFLAGS: 프로세서의 상태를 유지

     

    EAX (Extended Accumulator Register)

    - EAX 레지스터는 산술 (덧셈, 곱셈, 나눗셈 등등), 논리 연산을 수행할 때 사용되며 함수의 반환 값이 이 레지스터에 저장

    - 32Bit로 구성되어 있으며, EAX를 반으로 쪼개면 AX(16Bit)가 됨

    - 또다시 AX를 반으로 쪼개면 AH, AL로 나뉘고 각자 8Bit를 가지게 됨

     

    EBX (Extended Base Register)

    - EBX레지스터는 메모리 주소를 저장하기 위한 용도로 사용

    - 다른 레지스터들과 마찬가지로 32Bit로 구성되어 있으며, EBX를 반으로 쪼개면 BX(16Bit)가 됨

    - 그 BX를 또 반으로 쪼개면 BH, BL로 나뉘고 각자 8Bit를 가지게 됨

     

    ECX (Extended Counter Register)

    - ECX레지스터는 반복 명령어 (For, While) 명령어 사용 시 반복 카운터로 사용되는 레지스터

    - 즉, ECX레지스터에 반복할 횟수를 지정하고 반복 작업을 수행할 때 사용

     

    EDX (Exteded Date Register)

    - EDX레지스터는 EAX레지스터와 같이 쓰이고 부호 확장 명령 등에 쓰이고 큰 수의 곱셈 또는 나눗셈 등의 연산이 이루어질 때 EDX 레지스터가 사용

    - 32Bit로 구성되어 있고 EDX를 반으로 쪼개면 DX(16Bit)가 됨

    - DX를 또 쪼개면 DH(4Bit), DL(4Bit)가 됨

     

    ESI (Extended Source Index)/ EDI (Destination Index)

    - ESI는 데이터를 조작하거나, 복사할 때 데이터의 주소가 저장

    - EDI는 복사할 때 목적지의 주소가 저장 

     

    ESP (Extended Stack Pointer)/ EBP (Extended Base Pointer)

    - ESP는 Stack의 끝 지점 주소를 가리키고, EBP는 Stack의 첫 시작 주소를 가리킴

     

    함수 (Function)

    함수란?

    - 소프트웨어에서 특정 동작을 수행하는 코드 덩어리 - Printf도 일종의 함수

    - 함수는 크게 '시스템 정의 함수'와 '사용자 정의 함수'로 나눌 수 있음

    - 시스템 정의 함수는 운영체제에서 요구하는 형식에 맞추어 사용해야 함

    - 어셈블리 입장에서 볼 때, 함수 이름과 매개변수, 해당 함수를 제공하는 라이브러리 파일이 필요

     

    함수 호출 규약 (Calling Convention)

    - 호출자가 변수를 피호출자에게 넘기고, 피호출자의 작업 결과를 반환하는 방법을 정의한 규약

     

    명령어 집합 (Instruction Sets)

    - 실질적인 어셈블리 언어

    - 아키텍처 별로 다른 명령어와 사용방법이 존재하며 크게 데이터 이동, 산술/논리 연산, 제어 흐름을 위한 명령어로 구분이 가능

    - 데이터 이동: 메모리 <-> 메모리, 메모리 <-> 레지스터, 레지스터 <-> 레지스터

    - 산술/논리 연산: 더하고 빼기, 비트 연산, 소수점 계산 등 

    - 제어 흐름: 분기. 호출, 반환 등

     

    피연산자

    - 빠른 연산을 위해 사용되는 레지스터 - 수행 문맥, 제어정보, 데이터 임시저장

    - 레지스터는 CPU에 내장된 저장 공간으로, CPU 아키텍처마다 다름

     

    명령어 유형, 의미, 대표 명령어 세트

    - 데이터 이동 , scr에서 dst로 이동: mov, lea, les, push, pop, pushd, popad

    - 산술, 정수의 산술 연산: add, adc, sub, sbb, mul, imul, div, idev, cmp, inc, dec

    부동 소수점, 부동 소수점 산술 연산: fadd, fsub, fmul, div, cmp

    - 논리, 비트 논리 연산: and, or, xor, not, shl/sal, shr, sar, ror, rol

    - 제어 이동, 제어 흐름의 이동: jmp, jcc, call, ret, int, into

    - 문자열, 문자열의 비교, 이동: movs, stos, sca, outs, rep, repz, repnz, repne

    - I/O, 입력관 출력: in, out

    - 변환, 데이터 타입 변환: movzx, movsx, cbw, cdq, bswap

    - 기타, 플래그 조작 . 특권 모드 처리: clc, stc, cmc, std, cl, sti

     

     

Designed by Tistory.