이 단계부터는 사람이 해석하기 거의 불가능함!!
ex)
#include <stdio.h>
int main() {
printf("Hello, world!");
}
printf는 main.c가 아닌 libc라는 c 표준 라이브러리에 존재하는 함수임 -> libc에 존재하는 함수들 중 표준 입출력을 담당하는 함수들을 stdio.h로 묶어놓은 거
링커는 main.c에서 사용하고 있는 printf를 직접 stdio.h에서 찾아서 기능을 넣어주는 역활을 하고 있다고 보면 편함
어셈블 배웠으니까
그럼 디스어셈블은 뭘까? 당연히 어셈블의 반대, 즉 어셈블되있는 기계어 코드들을 다시 사람이 읽을 수 있는 형태로 풀어놓는거
이게 리버스 엔지니어링 -> 리버싱임
근데 솔직이 어셈 잘하는 사람도 있겠지만 솔직히 어셈도 해석하기 힘든 사람 많다.(그게 나야 뚜비뚜비뚜비뚜밤)
따라서 우리는 컴파일을 풀어줄 디컴파일러를 개발하게됨
컴퓨터가 실행해야할 파일 (= 프로그램)
전처리우리가 짠 소스 코드를 컴파일 전 필요한 형식으로 가공하는 과정
컴파일소스 코드 -> 어셈블리어
어셈블어셈블리어 -> 기계어
링크여러 가지 오브젝트 파일의 조인 + 필요한 라이브러리와 연결
디스어셈블기계어 -> 어셈블리어
디컴파일어셈블리어 -> 소스 코드