실행 파일
Executable프로그램 실행 |
---|
일반적인 개념 |
코드의 종류 |
컴파일 전략 |
주목할 만한 런타임 |
주목할 만한 컴파일러 및 툴 체인 |
컴퓨팅에서 실행 가능한 코드, 실행 가능한 파일 또는 실행 가능한 프로그램은 프로그램에 의해 해석(파싱)되어야 하는 데이터 파일과 달리, 때때로 단순히 실행 가능한 파일 또는 바이너리라고 불리며, 컴퓨터가 "부호화된 명령에 따라 지시된 작업을 수행"[1]하게 합니다.
정확한 해석은 용도에 따라 다릅니다."Instructions"는 전통적으로 물리적 CPU에 [2]대한 기계 코드 명령을 의미합니다.상황에 따라서는 스크립트 명령이 포함된 파일(바이트 코드 등)도 실행 가능한 것으로 간주될 수 있습니다.
실행 파일 생성
실행 파일은 기계어로 수작업으로 코딩할 수 있지만, 인간이 쉽게 이해할 수 있는 고급 언어로 소프트웨어를 소스 코드로 개발하는 것이 훨씬 편리합니다.경우에 따라서는 소스코드가 어셈블리 언어로 지정될 수 있으며, 이는 기계 코드 명령과 밀접하게 관련되어 있는 동안 사람이 읽을 수 있는 상태로 유지됩니다.
고급 언어는 실행 가능한 머신 코드 파일 또는 실행 불가능한 머신 코드(일종의 객체 파일)로 컴파일됩니다.어셈블리 언어 소스 코드에 대한 동등한 프로세스를 어셈블리라고 합니다.실행 파일을 생성하기 위해 여러 개체 파일이 연결되어 있습니다.실행 가능 여부에 관계없이 오브젝트 파일은 일반적으로 운영체제 고유의 ELF(Executable and Linkable Format) [3]또는 PE(Portable Executable)와 같은 컨테이너 형식으로 저장됩니다.생성된 머신코드에 구조를 부여합니다.예를 들어 .text(실행 가능 코드), .data(초기화된 글로벌 변수 및 정적 변수), .rodata(상수 및 문자열 등의 읽기 전용 데이터) 등의 섹션으로 나눕니다.
실행 파일에는 일반적으로 런타임 언어 기능(태스크 스케줄링, 예외 처리, 정적 컨스트럭터 및 디스트럭터 호출 등)과 운영체제와의 상호작용, 특히 인수 전달, 환경 전달, 종료 상태 반환, 기타 시작 및 shutdo를 구현하는 런타임 시스템도 포함됩니다.파일 핸들 등의 리소스 해방 등의 wn 기능C의 경우 crt0 오브젝트에 링크함으로써 이루어집니다.crt0 오브젝트에는 실제 엔트리 포인트가 포함되어 런타임라이브러리를 [4]호출하여 셋업과 셧다운이 실행됩니다.
따라서 실행 파일에는 일반적으로 특정 소스 코드에서 직접 생성된 것보다 훨씬 더 많은 기계 코드가 포함됩니다.임베디드 시스템 개발 등 경우에 따라서는 이 항목을 생략하거나 컴파일, 링크 및 로딩의 구조를 이해하는 것이 바람직할 수 있습니다.C에서는 통상적인 실행시간을 생략하고 대신 링커스크립트를 명시적으로 지정함으로써 실행할 수 있습니다.링커 스크립트는 엔트리 포인트를 생성하여 콜 등의 기동과 셧다운을 처리합니다.main
시작 및 종료 상태를 [5]커널로 되돌립니다.
실행
시스템(운영체제, 펌웨어, 부트 로더 등)에 의해 실행되기 위해서는 실행 파일이 시스템의 Application Binary Interface(ABI;[6] 응용 프로그램 바이너리 인터페이스)에 준거해야 합니다.간단한 인터페이스에서는, 메모리에 파일을 로드해 주소 공간의 선두로 점프해, 거기서부터 실행함으로써 파일을 실행한다.보다 복잡한 인터페이스에서는 실행 파일에는 별도의 진입점을 지정하는 추가 메타데이터가 있습니다.예를 들어, ELF에서 진입점은 헤더에 지정되어 있습니다.e_entry
[field] : 실행을 시작할 (가상) 메모리주소를 지정합니다.GCC(GNU 컴파일러 컬렉션)에서 이 필드는 링커에 의해 설정됩니다._start
기호.
「 」를 참조해 주세요.
레퍼런스
- ^ "executable". Merriam-Webster's Online Dictionary. Merriam-Webster. Retrieved 2008-07-19.
- ^ "Machine Instructions". GeeksforGeeks. 2015-11-03. Retrieved 2019-09-18.
- ^ "Chapter 4: Object Files". refspecs.linuxbase.org. Retrieved 2019-09-18.
- ^ Fisher, Tim. "List of Executable File Extensions". lifewire.com. Retrieved 2019-09-18.
- ^ McKellar, Jessica (2010-03-16). "Hello from a libc-free world! (Part 1)".
- ^ Boelen, Michael (2019-05-15). "The 101 of ELF files on Linux: Understanding and Analysis - Linux..." Linux Audit. Retrieved 2019-09-18.