컴파일(Compile)
컴파일러(Compiler)
컴파일 과정(C → Binary)
사용자가 작성한 소스 코드와 연산결과는 같으면서도, 최적화를 적용하지 않았을 때보다 짧고, 실행시간이 단축되는 어셈블러 코드가 만들어짐
// Name: a.c // Compile: gcc -o opt a.c -O2 #include <stdio.h> int main() { int x = 0; for (int i = 0; i < 100; i++) x += i; // x에 0부터 99까지의 값 더하기 printf("%d", x); }
$ gcc -S [소스 코드 파일명] -o [어셈블리 코드로 저장할 파일명]
어셈블(Assemble)
$ gcc -c [어셈블리어 코드] -o [저장할 목적 파일명] $ file [저장한 목적 파일명] //파일에 관한 정보 중 ELF 파일임을 확인 가능 $ hexdump -C [저장한 목적 파일명] //결과로 나온 파일을 16진수로 출력
# ELF : 리눅스 실행파일 형식
# 윈도우에서 어셈블하게 되면 목적 파일은 PE형식임
링크(Link)
// Name: hello-world.c // Compile: gcc -o hello-world hello-world.c #include <stdio.h> int main() { printf("Hello, world!"); }
$ gcc [링크로 연결될 파일] -o [파일] -Xlinker --unresolved-symbols=ignore-in-object-files $ file add
전처리(Preprocessing)
인터프리팅(Interpreting)
Python, Javascript 등의 언어는 사용자의 입력, 사용자가 작성한 스크립트를 그때 그때 번역하여 CPU에 전달하여 통역하는 역할
인터프리터(Interpreter)
인터프리팅을 처리해주는 프로그램
Compile
컴파일(Compile)
컴파일러(Compiler)
컴파일 과정(C → Binary)
→ 반복문의 결과로 'x'가 가질 값을 직접 계산하여 이를 대입하는 코드를 생성
어셈블(Assemble)
# ELF : 리눅스 실행파일 형식
# 윈도우에서 어셈블하게 되면 목적 파일은 PE형식임
링크(Link)
전처리(Preprocessing)
- 주석은 개발자가 자신과 개발자들의 코드 이해를 돕기위해 작성하는 메모
- 프로그램의 동작과 상관이 없으므로 전처리 단계에서 모두 제거
- #define으로 정의한 매크로는 자주 쓰이는 코드나 상숫값을 단어로 정의한 것으로,
전처리 과정에서 매크로의 이름은 값으로 치환
- 여러 개의 소스와 헤더 파일을 합치고 컴파일
(컴파일러가 여러 개의 소스와 헤더 파일을 컴파일해서 합치기도 함)
인터프리팅(Interpreting)
Python, Javascript 등의 언어는 사용자의 입력, 사용자가 작성한 스크립트를 그때 그때 번역하여 CPU에 전달하여 통역하는 역할
인터프리터(Interpreter)
인터프리팅을 처리해주는 프로그램
'Reverse Engineering' 카테고리의 다른 글