최상 답변
Portable Executable
Portable Executable 형식은 32 비트 및 64 비트 버전의 Windows 운영 체제에서 사용되는 실행 파일, 개체 코드, DLL, FON 글꼴 파일 및 기타 파일 형식입니다. PE 형식은 Windows OS 로더가 래핑 된 실행 코드를 관리하는 데 필요한 정보를 캡슐화하는 데이터 구조입니다.
여기에는 링크, API 내보내기 및 가져 오기 테이블, 리소스 관리 데이터 및 스레드를위한 동적 라이브러리 참조가 포함됩니다. -로컬 스토리지 (TLS) 데이터. NT 운영 체제에서 PE 형식은 EXE, DLL, SYS (장치 드라이버) 및 기타 파일 유형에 사용됩니다. EFI (Extensible Firmware Interface) 사양은 PE가 EFI 환경에서 표준 실행 가능 형식이라고 명시하고 있습니다.
답변
C 소스 코드의 이식성은 원하는 대상 플랫폼이있는 한 의미합니다. 작동하는 C 컴파일러를 사용할 수있는 경우 수정하지 않고도 다시 컴파일하여 플랫폼을 대상으로하는 C 소스 코드를 이동할 수 있습니다. 거의 모든 대상 플랫폼에 사용할 수있는 C 컴파일러가 있기 때문에 C는 이식성이 뛰어난 프로그래밍 언어로 간주됩니다.
즉, 단순히 C로 코드를 작성하면 휴대 성을 보장하지 않습니다 . 이식 할 수없는 코드를 작성하지 않으려면 규율을 연습해야합니다. 예를 들어, 다음 중 하나를 수행하는 코드를 작성하면 이식 할 수없는 코드가 생성됩니다.
- 문자를 제외한 모든 데이터 유형의 크기에 대해 가정합니다.
- Makes 데이터가 메모리 및 구조 내에서 정렬되는 방식에 대한 가정
- 데이터가 구조 내에서 패킹 / 패딩되는 방식에 대한 가정을합니다.
- 바이트 순서 지정 (빅 엔디안 대 리틀 엔디안)에 대한 가정을합니다. .
- 일부 컴파일러 구현에서 사용할 수없는 비표준 컴파일러 확장을 사용합니다.
- 일부 플랫폼에서 사용할 수없는 비표준 라이브러리 확장을 사용합니다.
- 다른 컴파일러 구현에서 다르게 작동 할 수있는 구현 정의 동작에 의존합니다.
- 표시 는 한 환경에서 작동하지만 다른 환경에서는 예상치 않게 작동 할 수 있습니다.
- 운영에 대한 API (애플리케이션 프로그래밍 인터페이스) 호출을 수행합니다. 모든 환경에서 사용할 수있는 것은 아닙니다.
- 특정 메모리 주소에 대해 가정합니다 (예 : 특정 메모리 주소가 하드웨어 장치 레지스터에 매핑되는 등).
- 포인터의 크기 또는 포인터가 int와 크기가 같다고 가정합니다.
- 인수가 전달되는 방식 (스택 또는 특정 레지스터에서)에 대한 가정을합니다.
- 모든 인라인 어셈블리 언어 소스 코드를 포함합니다.
- 일부 컴파일러 구현에서 아직 지원하지 않을 수있는 C 언어의 최신 기능을 사용합니다 (경우에 따라 지원되지 않을 수 있음). 지원됨).
- 위의 작업을 수행하는 라이브러리에 의존합니다.
이것은 완전한 목록이 아닙니다.
가능한 경우 이식 불가능한 코드를 사용하지 않는 것이 가장 좋은 방법은 이식 불가능한 코드를 별도의 소스 파일로 분리하는 것입니다. 그런 다음 코드를 새 타겟 플랫폼으로 이동해야 할 때 소스 코드의 어떤 하위 집합을 수정해야하는지 명확하게 알 수 있습니다.