3.1GCC 컴파일러GNU Compiler CollectionGNU에서 만든 컴파일러리눅스, 유닉스 계열 시스템에서 많이 사용됨C언어로 작성된 코드를 컴파일해서 실행 가능한 바이너리 프로그램으로 만들어주는 도구전처리(.c->.s) 컴파일 (.s->.i) 어셈블 (.i->.o) 링크 (.o->.exe)어셈블리 코드는 하드웨어에 의존적이다CPU 아키텍처 마다 해석할 수 있는 Instruction들이 각자 다름따라서 하드웨어에 맞게 어셈블리 코드로 변환시켜야 그 위에서 애플리케이션 실행 가능기계어 코드를 배워야 하는 이유?고급 언어의 추상화 계층으로 인해 감춰진 런타임 동작을 이해할 수 있음즉 Java와 같은 언어로는 보지 못하는 것들 (데이터가 어떻게 공유되고 있는지, 데이터가 정확히 어디서 어떻게 접근되고..