본문 바로가기
Study/리버싱

[0] 32bit 레지스터와 스택 구조, 스택 프레임

by 투말치 2020. 9. 14.

목차

    반응형

    범용 레지스터

    - 범용 레지스터는 총 8개로 각 범용 레지스터의 크기는 당연히 32bit다.

     

    ① EAX : 피연산자 및 결과 데이터를 위한 누적 장치

    ② EBX : 메모리 구조를 저장

    ③ ECX : while, for 같은 반복 명령어를 사용할 때 반복 카운터로 사용한다. 

    ④ EDX : 데이터를 저장하고 부호확장 명령, 큰 수 연산에 사용된다.

    위의 4개의 레지스터는 주로 산술연산 명령어에서 상수/변수 값을 저장하는 용도로 사용된다.

    ⑤ ESP : 스택의 끝 지점을 가리킴

    ⑥ EBP : 스택의 시작 지점을 가리킴

    ⑦ ESI : 데이터를 조작하거나 복사할 때 복사할 데이터의 주소를 저장한다.

    ⑧ EDI : 데이터를 복사할 때 목적지의 주소가 저장된다.

     

     

    세그먼트 레지스터

    - 종류는 총 6개고 크기는 16bit다.

    - 세그먼트 : 프로그램에 정의된 특정 영역으로 데이터, 코드, 스택 영역을 포함한다.

    - 세그먼트 레지스터는 세그먼트에 대한 주소를 제공한다.

     

    ① CS : 코드 영역 시작 주소

    ② SS : 스택 영역 시작 주소

    ③ DS : 데이터 영역 시작 주소 

    ④ ES : 추가 레지스터

    ⑤ FS : 여분의 레지스터

    ⑥ GS : 여분의 레지스터

     

     

    플래그 레지스터(EFLAGS)

    - 크기 : 32bit

    - 플래그 레지스터는 크게 상태 플래그와 제어 플래그로 나눌 수 있다.

     

    1) 상태 플래그

    ① CF : 부호 없는 수의 연산 시 오버플로우가 발생하면 플래그 값 1

    ② PF : 1의 개수가 짝수면 플래그 값 1

    ③ OF : 부호 있는 산술 연산 결과가 너무 크거나 작을 때 플래그 값 1 

    ④ AF : 산술 연산이 8비트 연산에서 비트 3 -> 비트 4로 캐리가 발생 시 플래그 값 1

    ⑤ SF : 산술/논리연산의 결과가 음수면 플래그 값 1

    ⑥ ZF : 연산 결과가 0이면 플래그 값 1

     

    2) 제어 플래그

    ① DF : 문자열 조작시 해당 플래그 값이 1이면 높은 주소에서 낮은 방향으로 처리

    ② TF : 플래그 값이 1이면 CPU가 명령을 실행할 때마다 인터럽트 발생

    ③ IF : 플래그 값이 1이면 인터럽트 요구를 받아들임

     

     

     

     

    스택 구조

    출처 : https://velog.io/@jangwonyoon/TIL20.03.19-Immersive-4-2

    스택은 메모리의 한 영역이다. 함수를 호출할 때 생성되는 지역 변수, 매개 변수가 스택에 저장되고 함수 호출이 끝나면 스택에 저장된 변수들은 사라진다. 스택의 가장 큰 특징은 메모리 주소가 높은 주소부터 낮은 주소 방향으로 할당되는 것이다.

     

     

     

    스택 프레임

    - 스택 프레임은 서브 루틴(함수)이 가지는 스택 영역을 말한다.

    - 함수 호출이 발생하면 스택 프레임이 생성된다. -> 생성된 스택 프레임에는 EBP의 초기 값이 저장되고 현재의 ESP를 EBP에 다시 저장한다. -> 함수에서 사용되는 변수들이 저장된다. -> 함수의 연산이 다 진행되면 EBP에 저장했던 초기 ESP값을 다시 복원하고 EBP의 값도 함수를 시작하기 전의 EBP 값으로 복원한 다음에 함수가 종료된다.

     

     

     

     

    반응형

    'Study > 리버싱' 카테고리의 다른 글

    [3] UPX 패킹과 언패킹  (0) 2020.11.01
    [3] IAT와 EAT 로딩 과정  (0) 2020.10.26
    [3] ㄷㄹㅎ 4,5  (0) 2020.10.25
    [2] 2주차 과제  (0) 2020.09.20
    [1] 32bit와 64bit의 함수 호출 규약  (1) 2020.09.14