범용 레지스터, 플래그 레지스터, 스택 프레임

2024. 9. 28. 01:30·reversing

general register 범용 레지스터

reg size: 4 byte

종류: EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESP, EIP

EAX, EBX, ECX, EDX → 산술 명령어에서 상수나 변수값이 저장되는 용도

EAX는 결과값을 저장하거나 오퍼랜드(피연산자)를 축적

ECX는 while, for 반복문을 사용할 때 ECX loop count -1 감소

ESI, EDI, EBP, ESP은 메모리 주소를 저장하는 포인터로 사용

EBP는 ESP 값을 저장

ESP는 스택 메모리 주소를 저장

EIP는 CPU가 처리할 명령어 주소

EAX: 4byte

AX: 2byte

AH(high): 1byte

AL(low): 1byte

flag register 플래그 레지스터

명령어의 실행 여부를 결정함

명령 수행에 따라 true(1) or false(0)로 세팅되어 32개가 있음

  1. ZF zero flag: 연산 명령 후 결과값이 0이 되면 ZF가 1(true)로 세팅됨
  2. ex) mov eax, 1 → mov ebx, 1 → sub eax, ebx → r = 0 ⇒ ZF =1
  3. OF overflow flag: 부호가 있는 수 signed integer의 오버플로가 발생했을 때 1로 세팅됨. MSB(최상위 비트)가 변경되었을 때 1로 세팅됨
  4. CF carry flag: 부호가 없는 unsigned integer의 오버플로가 발생했을 때 1로 세팅됨

Stack 스택

스택의 역할

  1. 함수 내의 로컬 변수가 임시 저장됨
  2. 함수 호출 시 매개변수 parameter 전달
  3. 복귀 주소 저장

스택의 특징

LIFO, 스택에서 esp는 움직이고 ebp(esp 값 저장)는 움직이지 않는다


Stack Frame 스택 프레임

스택 프레임을 이해하면 디버깅에 큰 도움이 될 것

스택 프레임: esp가 아닌 ebp를 이용하여 스택 내 변수 파라미터 복귀 주소에 접근하는 기법

ex) 어셈블리 코드

PUSH EBP: 함수 시작 스택으로 EBP 백업

MOV EBP, ESP: ESP값을 EBP에 넣음 (esp 백업)

.

. (함수 로직). 여기서 esp가 변경되어도 괜찮다

.

MOV ESP, EBP: ESP 복원

POP EBP: EBP 복원

RETURN: 함수 종료

위 코드를 보면 esp값이 아무리 바뀌어도 ebp를 기준으로 안전하게 해당 변수나 파라미터, 복귀 주소에 접근 가능하다. 다만, 스택에 값이 저장되는 것이 보안에 취약할 수 있다.

저작자표시 비영리 변경금지

'reversing' 카테고리의 다른 글

레지스터, 프로세스 메모리 구조, 섹션, 스택, 힙  (0) 2024.10.27
악성코드 종류와 분석  (1) 2024.10.19
static vs. dynamic analysis  (0) 2024.10.13
Binary  (0) 2024.10.13
리버싱 개념, 크랙과 패치, 바이트 오더링  (0) 2024.09.28
'reversing' 카테고리의 다른 글
  • 악성코드 종류와 분석
  • static vs. dynamic analysis
  • Binary
  • 리버싱 개념, 크랙과 패치, 바이트 오더링
hauni
hauni
  • hauni
    200 OK
    hauni
  • 전체
    오늘
    어제
    • 분류 전체보기 (48) N
      • W3B H4CK1NG (13) N
      • reversing (10)
      • python (16) N
      • project (1)
        • WHS (0)
        • network (1)
      • 동아리_I.Sly() (8) N
      • something... (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    이것이리눅스다
    네트워크
    보안
    록키리눅스
    VMware
    방화벽
    리눅스
    방화벽 구현
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
hauni
범용 레지스터, 플래그 레지스터, 스택 프레임
상단으로

티스토리툴바