개발세발보안중
프로그램과 컴파일 본문
기계어 : 컴퓨터에게 명령을 내리기 위한 컴퓨터 언어, 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 |