본문 바로가기

Layer7

실행파일 생성 과정

파일 종류

  • .c (source file): 소스코드가 담긴 파일
  • .i : 전처리가 완료된 소스코드가 담긴 파일
  • .s : 소스코드를 어셈블리어로 컴파일한 파일
  • .o (object file) : 어셈블리어를 기계어로 컴파일한 파일
  • 실행파일 : 목적 파일을 실행 가능하게 만든 파일

 

 

전치리기(Pre-processor) : 어셈블리어로 컴파일되기 전에 전처리 지시자를 실행시켜주는 프로그램

  • 전처리 지시자 : 컴파일하기 전에 처리되는 작업(전처리)을 나타내는 키워드

ex) #include : 헤더 파일을 현재 소스코드에 포함시켜 주는 지시자

#define : 특정 값 혹은 작업을 하나의 이름으로 설정해주는 매크로를 정의하는 지시자

조건부 컴파일 지시자 : 소스코드를 조건에 따라 선택적으로 컴파일


컴파일러(Compiler) : 컴파일을 실행하는 언어 번역 프로그램

  • 컴파일 : 하나의 프로그래밍 언어로 짜여진 코드를 다른 언어로 변환하는 작업 (C언어 → 어셈블리어)

 

 

<< 컴파일러 작동 원리 >>

  • 어휘 분석(Lexical analysis)
  • 구문 분석(Syntax analysis)
  • 의미 분석(Semantic analysis)

→ 각 소스 코드의 의미 파악

  • 중간 코드 생성
  • 코드 최적화(독립적)

→ CPU에 독립적인 최적화를 위해 실행

  • 코드 생성(Code generation)
  • 코드 최적화(의존적)

 

소스 코드 → 어셈블리어 (어셈블리어 파일)


 

 

어셈블러(Assembler) : 어셈블리어 코드를 기계어 형태의 오브젝트 코드로 해석해주는 언어 번역 프로그램

 

어셈블리어들이 각 ISA의 명령어 포맷에 따라 기계어로 변환되어 목적 파일 생성

 

어셈블러 종류 

  • 단일 패스 어셈블러 : 하나의 명령문을 읽는 즉시 기계어로 번역하여 오브젝트 프로그램을 만듦

 

  • 이중 패스 어셈블러 : 처음부터 끝까지 읽어 1단계의 작업을 수행한 후, 다시 읽으면서 1단계 수행 결과를 사용하여 오브젝트 프로그램을 만듦

 

  • 크로스 어셈블러 : 현재 어셈 블하는 컴퓨터가 아닌 어셈블 된 프로그램을 실행시킬 컴퓨터에 맞게 오브젝트 프로그램 생성

 

어셈블리 → 기계어 (오브젝트 파일)


링커(Linker) : 컴파일러가 만들어낸 하나 이상의 오브젝트 파일을 가져와 단일 실행 프로그램으로 병합하는 프로그램

  • 링킹 : 만들어진 오브젝트 파일을 다른 오브젝트 파일이나 라이브러리와 연결시켜주는 작업
더보기

라이브러리(libary) : 다른 프로그램들과 링크(link) 되기 위하여 존재하는 하나 이상의 서브루틴(subroutine)이나 함수(function)들의 집합 파일

 

stdio.h : 표준 입출력 함수

string.h : 메모리와 문자열의 처리

ctype.h : 문자 검사 및 변환

math.h : 수학 함수

stdlib.h : 메모리 동적 할당, 가상 난수 발생, 문자열 변환

malloc.h : 메모리 할당에 관련된 함수

time.h : 날짜와 시간 그리고 내부 클럭

  • Dynamic Link(동적 링크) : 실행 단계에서 라이브러리나 다른 오브젝트 파일이 연결됨
  • Static Link(정적 링크) : link 단계에서 라이브러리나 다른 오브젝트 파일을 바이너리에 포함 시킴

pwndbg 명령어

 

r : 실행

ctrl + c : 실행 중단

 

disassemble [함수명] : 함수 디스어셈블 목록 확인

b(break) [함수명/주솟값] : break point 걸기

del : break ponit 삭제

ni : 한 줄씩 코드 진행 (call 함수 내부는 건너뜀)

si : call 함수 내부까지 한 줄씩 진행

 

'Layer7' 카테고리의 다른 글

Assembly X86 Stack 관리  (1) 2021.05.24
Assembly X64  (0) 2021.05.22
C Pointer  (1) 2021.05.11
embedded(임베디드)  (3) 2021.04.20
Pipelining : Hazard  (2) 2021.04.17