main.c 파일 실행 과정
Binary 파일은 어떤 과정으로 실행될까?
2023-11-04
linkerloader
main.c 파일 실행 과정
소스코드 형태의 main.c가 있다. 이 프로그램이 실행되는 과정을 알아보자.
-
컴파일러는 main.c를 컴파일해서 object file인 main.o로 만든다.
- Relocatable object file이라고도 한다.
-
링커가 main.o와 다른 object 파일을 합쳐 하나의 binary 실행 파일로 만든다.
- 이때 정적 라이브러리가 링크된다.
-
로더가 실행 파일을 메모리에 로드된다.
- 실행을 위해서 shell은
fork()
를 호출해 새로운 프로세스를 생성한다. - 그 다음 shell은
exec()
system call과 함께 로더를 invoke한다. - 실행할 파일의 이름을 인자로 넘겨주면 로더는 새롭게 생성된 프로세스의 주소 공간에 실행 파일을 로드한다.
- linking과 loading을 통해 프로그램에 최종 주소를 할당해 라이브러리의 함수 혹은 변수를 호출, 참조할 수 있게 된다.
- 실행을 위해서 shell은
-
프로그램이 실행된다.
- 이때 동적으로 연결된 라이브러리가 링크된다.
- 실행 후 조건에 의해 동적으로 연결되는 라이브러리를 DLL이라고 한다.
- 여러 프로세스가 DLL을 공유하여 메모리를 절약할 수 있다.
Object file과 executable file 포맷
- ELF(Executable and Linkable Format) : Linux, UNIX
- PE(Portable Executable) : Windows
- Mach-O(Mach Object) : macOS