본문 바로가기
System

시스템 해킹 공부 전에..

by jjudy 2021. 9. 12.

스터디에서 주로 리눅스에서 C언어 프로그램의 취약점을 찾는 공격을 진행하기 때문에 C언어에 대한 공부를 해보자.

 

 

 

 

컴파일 과정(Compile Process) ?

쉽게 말해, visual studio 에서 F5키를 눌러서 c언어 실행시키는 그 과정이다.

 

 

 

 

 

위 과정을 거치면서 실행 가능한 바이너리 파일로 만들어진다.

 

 

 

* 파일(file) ?

  의미 있는 정보를 담고 있으며, 이름을 가지고 있는 저장 장치상 논리적인 단위

  C언어에서는 이러한 파일을 바이트별로 따로 읽을 수 있는 바이트의 집합으로 취급한다.

 

  1) 바이너리 파일(binary file)

     : 데이터의 저장과 처리를 목적으로 0과 1의 이진 형식으로 인코딩된 파일

      프로그램이 이 파일의 데이터를 읽거나 쓸 때 어떤 변환이 일어나지 않는다.

 

 

 

  2) 텍스트 파일(text file)

     : 사람이 알아볼 수 있는 문자열로 이루어진 파일

      프로그램이 이 파일의 데이터를 읽거나 쓸 때는 포맷 형식에 따라 데이터의 변환이 일어난다.

 

 


 

 

1. 전처리기(Preprocessor)

 

 

C언어에서 printf 함수를 사용하기 위해 #include <stdio.h> 를 항상 명시한다. 

이렇게 #으로 시작하는 구문을 처리하는 것이 전처리기이다.

 

 

 

 

예를 들어, #define A 10 을 명시하고 int main() 에서 int A; 을 선언해주면 전처리기 과정을 통해서

int 10; 으로 치환된다.

 

#define A 10 을 명시한 화면

 

전처리기 과정을 거친 후 A가 10으로 치환된 화면

 

 

 

2. 컴파일러(Compiler)

 

 

컴파일러는 해석기, 번역기라는 뜻으로 우리가 작성한 소스 코드를 컴퓨터가 이해할 수 있는 컴퓨터 언어로

변환시켜주는 역할을 한다.

소스 코드는 인간들이 이해하기 쉽도록 설계된 "고수준 언어"라고 하고, 기계가 이해할 수 있는 언어는

"저수준 언어"라고 한다.

즉, 고수준 언어를 기계가 이해할 수 있는 저수준 언어로 변환해주는 것이다.

 

 

 

 

 

3. 에셈블러(Assembler)

 

 

어셈블리어를 기계어 형태의 오브젝트 코드로 해석해주는 컴퓨터 언어 번역 프로그램이다.

완전히 기계어로 바꿔주는 역할을 한다. 

목적코드(=오브젝트 코드) 파일은 어셈블된 프로그램 명령어와 데이터가 들어있는 ELF 바이너리 포맷 구조를 갖는다.

 

* ELF(Executable and Linking Format) ?

  실행 가능한 바이너리 또는 오브젝트 파일 등의 형식을 규정한 것

 

 

 

 

 

4. 링커(Linker)

 

 

링커는 여러 개의 오브젝트 파일 또는 라이브러리들을 연결하는(=링크) 역할을 한다.

이 과정이 끝나면 실행 가능한 실행파일(.exe)가 만들어진다.

 

 

 

'System' 카테고리의 다른 글

Hackctf x64 Buffer Overflow write-up  (0) 2022.03.28
Hackctf Basic_BOF #2 Write-up  (0) 2022.03.28
Handray2  (0) 2022.03.28
Handray  (0) 2022.03.28
시스템 해킹이란?  (0) 2021.09.11

댓글