리버싱 입문

[리버싱 입문](1)[PE파일, 레지스터와 메모리]

황올뱀 2025. 2. 3. 19:03

PE파일: 윈도우의 실행 파일 형식

  • 헤더: 기본 정보 (파일을 실행하는데 필요한 정보), 배치 정보 (파일을 어디에 저장해야 하는지 알려주는 정보)가 들어가 있다.
  • 바디: 코드와 데이터가 들어가 있다.
    PE파일의 실행 과정: 운영체제의 loader가 header의 정보를 분석해서 body에 있는 코드와 데이터를 코드 영역과 메모리 영역에 배치. 이후 프로그램이 실행하며 쌓이는 데이터는 스택(매개변수, 지역변수)이나 힙(동적 메모리 할당)에 저장한다. 이후 프로그램이 종료되면 CPU반환하고 사용하던 레지스터 메모리에 저장하고 끝

IA-32 레지스터:

  • eax: 함수 반환값
    가장 많이 쓰는 레지스터 변수. 산술 연산, 반환값 저
  • ebx: esi, edi와 결합해 인덱스에 사용
  • ecx: 반복문 반복 횟수, 연산 시행 횟수
    for(i=0;i<5;i++)의 i 역할을 한다. 단, 다른 점이라면, ecx=5 로 정하고 ecx--로 반복한다.
  • edx: eax와 함께 사용, 부호확장에 쓰임
  • esi: 데이터를 옮길 때 원본을 가리킴
  • edi: 데이터를 옮길 때 목적지를 가리킴
  • esp: 사용중인 스택의 위치를 가리킴
  • ebp: 스택의 바닥을 가리킴

스택: 먼저 들어온것이 나중에 나가는 LIFO구조.
스택 시작주소부터 주소가 작아지는 방향으로 데이터가 쌓이는 특징.

  • push: 데이터를 스택의 상단에 집어넣기
  • pop: 가장 상단에 있는 데이터를 스택에서 꺼내기
    스택프레임: 함수가 가지는 자신만의 스택 영역. 함수가 호출될 때 스택프레임 생성,
    함수 종료 후 복귀 주소로 돌아갈 때 소멸
728x90
반응형