[Rev] 2. Disassemble

KBC·2024년 8월 26일

리버싱

목록 보기
3/11

Pre : Compile??

Compile은 사람의 언어로 작성된 Source Code를 컴퓨터 언어로 표현하는 것이다.

1. Preprocess

컴파일 전처리 단계에서 주요 Task는 두 가지로 헤더 파일 삽입과 매크로 치환이 있다.

// 1. 헤더 파일 삽입
#include <stdio.h>

// 2. 매크로 치환
#define PI 3

#ifdef _WIN32
	#ifdef _WIN64
    	#define COM "window64"
    #else
    	#define COM "window32"
#elif __APPLE__
	#define COM "apple"
#endif

int main(){
	printf("%d, %s\n", PI, COM);
    return 0;
}

2. Compile


컴파일 과정은 Front End와 Back End로 나뉘고

Lexer와 Parser가 토큰을 주고 받으며 Abstract syntax tree를 생성한다.

4. Assemble

Abstract syntax tree에서는 Aseembly 언어로 변환하고 최종적으로는 바이트 코드로 변환하게 된다.

5. Linking

이러한 컴파일 과정 이후에는 컴퓨터는 이해하고 실행할 수 있지만 사람이 읽기 힘든 언어로 나오게 된다.

Disassemble

컴파일 과정을 거꾸로 사람이 읽을 수 있는 언어로 만드는 것이다.(Binary to Human code)

Disassembler

  • Linux - gdb
  • window - x64dbg
  • macOS - LLDB

gdb Disassembler options

  • (gdb) info func # 함수 정보 확인
  • (gdb) set disassembly-flavor intel # intel 형식의 어셈블리어로 출력 설정
  • (gdb) disassemble function name # 특정 함수 디스어셈블
profile
AI, Security

0개의 댓글