개발세발보안중

프로그램과 컴파일 본문

Reversing

프로그램과 컴파일

채영채영 2022. 9. 25. 03:41

기계어 : 컴퓨터에게 명령을 내리기 위한 컴퓨터 언어, 0과 1로 이루어져 있음

어셈블리어: 사람이 이해하기 쉬운 컴퓨터 언어

어셈블러: 어셈블리어를 기계어로 번역해줌

==============저급 언어===============================

컴파일러: C, C++, Go, Rust 등 사람이 이해하기 더욱 쉬운 언어를 기계어로 번역해줌

C,C++,Gp.Rust=======고급언어========

 

프로그램과 컴파일

프로그램은 연산 장치가 수행해야 하는 동작을 정의한 일종의 문서이다. 

프로그램을 연산 장치에 전달하면, CPU는 적혀있는 명령들을 처리하여 프로그래머가 의도한 동작을 수행

Computer = programmable 연산 장치, 계산기 = non-programmable 연산 장치

 

에니악(ENIAC) - 사람이 전선을 연결하여 컴퓨터에 프로그램을 전달 > 프로그램이 바뀔 때마다 배선을 재배치, 비효율적, 큰 프로그램 사용 어려움

현대의 컴퓨터 : Stored-Program Computer

 

프로그래밍 언어는 프로그램을 개발하기 위해 사용하는 언어를 말한다.

Source Code : CPU가 수행해야 할 명령들을 프로그래밍 언어로 작성한 것

Compile : 소스코드를 기계어로 번역하는 것 / 어떤 언어로 작성된 소스코드를 다른 언어의 목적 코드로 번역하는 것.!

Compiler : 컴파일을 해주는 소프트웨어 ex) GCC, Clang, MSVC

 

*python, javascript는 컴파일을 필요하지 않음! 

사용자의 입력마다 그때 그때 번역하여 CPU에 전달한다. => Interpreting! (Interpreter)

 

<컴파일 과정>

C언어로 작성된 코드는 일반적으로 

전처리(Preprocess), 컴파일(Compile), 어셈블(Assemble), 링크(Link)의 과정을 거쳐바이너리로 번역된다

 

-전처리

전처리는 컴파일러가 소스 코드를 어셈블리어로 컴파일하기 전에 필요한 형식으로 가공하는 과정이다

1) 주석 제거

2) 매크로 치환- #define 으로 정의한 매크로는 자주 쓰이는 코드나 상숫값을 단어로 정의한 것, 매크로의 이름은 값으로 치환

3) 파일 병합

 

-컴파일

컴파일은 C로 작성된 소스 코드를 어셈블리어로 번역하는 것.

문법 검사, 오류시 컴파일 멈추고 에러 출력! 

 

-어셈블

어셈블은 컴파일로 생성된 어셈블리어 코드를 ELF 형식의 목적파일로 변환하는 과정.

*ELF은 리눅스의 실행파일 형식. PE형식은 윈도우 실행파일 형식

 

-링크

링크는 여러 목적 파일들을 연결하여 실행 가능한 바이너리로 만드는 과정

 

'Reversing' 카테고리의 다른 글

리버싱 7주차  (0) 2022.11.07
Analysis  (0) 2022.09.25
디스어셈블과 디컴파일  (0) 2022.09.25
리버싱 스터디 1주차  (0) 2022.09.20
[Codeengn] RCE L08, L15  (0) 2022.09.20
Comments