맨위로가기

PE 포맷

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

PE(Portable Executable) 포맷은 마이크로소프트 윈도우 운영 체제에서 실행되는 실행 파일, DLL, 그리고 다른 실행 가능한 파일들을 위한 파일 형식이다. 윈도우 NT 3.1에서 처음 도입되어 16비트 NE 형식을 대체했으며, .NET PE 포맷, PE32+ (PE+), 윈도우 CE를 위한 명세 등으로 확장되었다. PE 파일은 MS-DOS 실행 파일을 포함하는 헤더를 가지고 있어 하위 호환성을 제공한다. PE 파일은 여러 헤더와 섹션으로 구성되며, 동적 링커가 파일을 메모리에 매핑하는 방식을 설명한다. 주요 섹션으로는 .text (코드), .data (전역 변수), .rsrc (리소스) 등이 있으며, 임포트 테이블, 재배치, .NET 관련 정보 등 다양한 기술적 세부 사항을 포함한다. PE 파일은 윈도우 외에도 Wine, ReactOS, UEFI 펌웨어, Mono, .NET Core 등 다양한 환경에서 사용된다. PE 파일 뷰어 및 편집 도구로는 CFF Explorer, PE Explorer 등이 있으며, GNU Binutils와 pefile과 같은 도구도 PE 포맷을 지원한다.

더 읽어볼만한 페이지

  • 실행 파일 포맷 - EXE
    EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다.
  • 실행 파일 포맷 - COM 파일
    COM 파일은 CP/M 및 MS-DOS 운영체제에서 사용된 실행 파일 형식으로, 메타데이터 없이 코드와 데이터로 구성되어 64KB 크기 제한을 가지며, 단순한 구조로 극소의 실행 파일을 만들 수 있지만 보안 취약점도 존재한다.
  • 파일 포맷 - 바로 가기
    바로 가기는 운영체제에서 파일, 폴더, 프로그램, 웹 페이지에 대한 참조를 제공하는 기능 및 파일로, 사용자들이 원본에 빠르게 접근하도록 GUI 환경의 사용성을 향상시킨다.
  • 파일 포맷 - EXE
    EXE 파일 형식은 운영 체제에 따라 다양한 종류가 있는 실행 파일의 한 형태로, DOS MZ 실행 파일에서 PE, PE32+까지 발전해 왔으며, 코드, 데이터, 스택을 별도 관리하고 재배치 항목을 통해 실행 환경에 유연하게 대응하는 특징을 가진다.
PE 포맷 - [IT 관련 정보]에 관한 문서
일반 정보
이름Portable Executable (PE)
종류바이너리, 실행 파일, 오브젝트 코드, 공유 라이브러리
확장자.acm, .ax, .cpl, .dll, .drv, .efi, .exe, .mui, .ocx, .scr, .sys, .tsp, .mun, .msstyles, .fon
MIME 형식application/vnd.microsoft.portable-executable
매직 넘버MZ 0x00(×10) PE 0x00 0x00
개발현재 마이크로소프트
기반DOS MZ executable, COFF
설명
정의Portable Executable (PE) - 정의 - Trend Micro IN Portable executable (PE) - Definition - Trend Micro IN
사양UEFI 사양, 버전 2.8B UEFI Specification, version 2.8B
관련 문서PE 포맷 (Windows) PE Format (Windows)
UEFIUEFI 사양, 버전 2.4 UEFI Specification, version 2.4
EFI 부트 스텁EFI 부트 스텁 The EFI Boot Stub

2. 역사

마이크로소프트는 윈도우 NT 3.1 운영 체제와 함께 PE 포맷을 도입했다. 이는 기존의 16비트 NE 형식을 대체하기 위한 것이었다. 이후 윈도우 95, 윈도우 98, 윈도우 ME 및 윈도우 3.1x용 Win32s 확장도 PE 구조를 채택했다. PE 파일은 MS-DOS 실행 파일을 포함하는 헤더를 가지고 있어, DOS와의 하위 호환성을 제공한다. 기본적으로 이 헤더는 "This program cannot be run in DOS mode" (This program cannot be run in DOS mode영어) 메시지를 보여주는 스텁이다.[24] 그러나 이 DOS 섹션은 윈도우 98 SE 설치 프로그램처럼 완전한 기능을 갖춘 DOS 프로그램으로 바꿀 수 있다. 개발자는 마이크로소프트 링커의 `/STUB` 스위치를 사용하여 이러한 프로그램을 추가하여 팻 바이너리를 만들 수 있다.[5]

시간이 지남에 따라 PE 형식은 윈도우 플랫폼과 함께 성장했다. 주목할 만한 확장에는 관리 코드를 위한 .NET PE 형식, 64비트 주소 공간 지원을 위한 PE32+, 윈도우 CE용 특수 버전이 있다.

PE 파일이 32비트 또는 64비트 아키텍처용인지 확인하려면 `IMAGE_FILE_HEADER`의 Machine 필드를 검사하면 된다.[6] 일반적인 머신 값은 32비트 인텔 프로세서의 경우 `0x014c`이고 x64 프로세서의 경우 `0x8664`이다. 또한 `IMAGE_OPTIONAL_HEADER`의 Magic 필드는 주소가 32비트인지 64비트인지 나타낸다. `0x10B` 값은 32비트(PE32) 파일을 나타내고 `0x20B`는 64비트(PE32+) 파일을 나타낸다.[7]

3. 기술적 세부사항

PE (Portable Executable) 32비트 구조


PE 파일은 동적 링커가 파일을 메모리에 매핑하는 방법을 설명하는 여러 헤더와 섹션으로 구성된다.
PE 헤더PE 파일은 DOS 헤더, PE 시그니처, COFF 헤더, 옵션 헤더, 섹션 헤더로 구성된다.[15]

  • DOS 헤더: MS-DOS와의 호환성을 위한 헤더이다.
  • PE 시그니처: PE 파일임을 나타내는 고유 식별자("PE\0\0")이다.
  • COFF 헤더: 파일의 기본 정보를 담고 있다.
  • 옵션 헤더: PE 파일의 상세 정보를 담고 있다.
  • 섹션 헤더: 각 섹션에 대한 정보를 담고 있으며, 섹션 수만큼 존재한다.

섹션PE 파일은 코드, 데이터, 리소스 등의 내용을 여러 섹션으로 나눈다. 각 섹션은 섹션 헤더에 의해 기술되며, 메모리에 로드될 때의 속성(읽기 가능, 쓰기 가능, 실행 가능 등)이 정의된다.[8][9]

일반적인 섹션은 다음과 같다.

섹션 이름설명
.text실행 가능한 명령이 포함된 코드 섹션이다.
.data초기화된 전역 변수정적 변수의 초기값이 포함된 데이터 섹션이다.
.bss초기화되지 않은 전역 변수 및 정적 변수를 위한 데이터 섹션이다.
.rdata상수 문자열 및 임포트 테이블이 포함된 읽기 전용 데이터 섹션이다.
.rsrc아이콘, 문자열, 대화 상자 등의 리소스가 포함된 리소스 섹션이다.
.edataDLL이 외부로 공개하는 함수(익스포트) 정보가 포함된 익스포트 테이블 섹션이다.
.idata실행 파일이 의존하는 DLL 정보가 포함된 임포트 테이블 섹션이다.
.reloc실행 파일의 로드 주소가 변경될 경우 주소를 수정하기 위한 정보가 포함된 리로케이션 테이블 섹션이다.


데이터 디렉터리데이터 디렉터리는 PE 파일 내의 중요한 데이터 구조에 대한 포인터를 저장한다. 여기에는 Export Table영어(익스포트 테이블), Import Table영어(임포트 테이블), Resource Table영어(리소스 테이블), Exception Table영어(예외 테이블) 등에 대한 포인터가 포함된다.[4]

항목 이름설명
Export Table영어익스포트 테이블에 대한 포인터
Import Table영어임포트 테이블에 대한 포인터
Resource Table영어리소스 테이블에 대한 포인터
Exception Table영어예외 테이블에 대한 포인터
Certificate Table영어인증서 테이블에 대한 포인터
Base Relocation Table영어리로케이션 테이블에 대한 포인터
Debug영어디버그 정보에 대한 포인터
Architecture영어아키텍처 정보에 대한 포인터
Global Ptr영어전역 포인터에 대한 포인터
TLS Table영어TLS (스레드 로컬 저장소) 테이블에 대한 포인터
Load Config Table영어로드 구성 테이블에 대한 포인터
Bound Import영어바인딩된 임포트에 대한 포인터
Import Address Table영어임포트 주소 테이블에 대한 포인터
Delay Import Descriptor영어지연 임포트 설명자에 대한 포인터
CLR Runtime Header영어CLR (공용 언어 런타임) 런타임 헤더에 대한 포인터
Reserved영어예약됨


3. 1. 레이아웃

PE 파일은 동적 링커에게 파일을 메모리로 어떻게 매핑할지 설명하는 많은 헤더들과 섹션들로 이루어져 있다. 실행 가능한 이미지(executable image)는 여러 개의 서로 다른 영역으로 구성되며, 각 영역은 서로 다른 메모리 보호 속성을 필요로 한다. 따라서 각 섹션의 시작은 반드시 페이지 경계에 맞춰 정렬되어야 한다.[8] 예를 들어, 프로그램 코드를 포함하는 .text 섹션은 일반적으로 실행/읽기 전용으로 매핑된다. 반대로, 전역 변수를 저장하는 .data 섹션은 실행 불가/읽기 쓰기로 매핑된다. 그러나 공간을 절약하기 위해 섹션은 디스크에 이러한 방식으로 정렬되지 않는다. 동적 링커는 각 섹션을 개별적으로 메모리에 매핑하고 헤더의 정보를 기반으로 올바른 권한을 할당한다.[9]

3. 2. 임포트 테이블 (Import Address Table, IAT)

임포트 테이블(Import Address Table, IAT)은 응용 프로그램이 다른 모듈의 함수를 호출할 때 사용하는 검색 테이블이다. 컴파일된 프로그램은 의존하는 라이브러리의 메모리 위치를 모르기 때문에 API 호출 시 간접적인 점프가 필요하다. 동적 링커는 모듈을 로드하고 연결할 때 IAT에 실제 함수의 주소를 채워 넣는다. 그러면 IAT는 상응하는 라이브러리 함수의 메모리 위치를 가리키게 된다.[9]

이러한 방식은 모듈 내부의 호출에도 추가적인 점프가 필요하지만, 다음과 같은 중요한 이점을 가진다. 로더에 의해 변경되며 쓰기 시 복사가 요구되는 메모리 페이지들의 수가 최소화돼서 메모리와 디스크의 입출력 시간을 절약할 수 있다. 만약 컴파일러가 호출이 모듈 내부에서 일어나는 것이라고 미리 안다면 더 최적화된 코드를 생성할 수도 있다.[9]

3. 3. 재배치 (Relocation)

PE 파일은 위치 독립적 코드를 포함하지 않는다. 대신에 선호되는 베이스 주소로 컴파일되고, 모든 주소는 그 전에 고정된다. 만약 PE 파일이 우선되는 주소에 로드될 수 없다면 (다른 것이 이미 위치하고 있는 경우), 운영 체제는 베이스 주소를 바꾼다. 이것은 모든 절대 주소를 다시 계산하고 새로운 값을 사용하도록 코드를 바꾸는 것을 포함한다. 로더는 우선되는 주소와 실제 로드될 주소를 비교하고 델타 값을 계산함으로써 이를 수행한다. 그 후 우선되는 주소에 새로운 주소의 위치에 대한 값을 더한다. 베이스 재배치는 메모리 위치에 목록화되고 저장된다. 결과 코드는 이제 프로세스에 사적이 되고 공유될 수 없게 됨으로써 DLL의 수많은 메모리 절약 이점이 사라진다. 또한 모듈을 로딩하는 시간도 매우 느려지게 된다. 이러한 이유로 재배치는 가능한 한 피해야 하며, 마이크로소프트에서 나온 DLL은 겹쳐질 수 없게 만들어져 있다.

3. 4. .NET과 PE 포맷

.NET 실행 파일에서 PE 코드 섹션은 CLR 가상 머신 시작 항목인 `_CorExeMain` 또는 `_CorDllMain`을 `mscoree.dll`에서 호출하는 스텁을 포함하며, 이는 비주얼 베이직 실행 파일과 유사하다. 그런 다음 가상 머신은 .NET 메타데이터를 사용하며, 그 루트인 `IMAGE_COR20_HEADER` ("CLR 헤더"라고도 함)는 PE 헤더의 데이터 디렉터리에 있는 `IMAGE_DIRECTORY_ENTRY_COMHEADER` 항목에 의해 가리켜진다.[4]

CLR 관련 데이터는 루트 구조 자체를 포함하여 일반적으로 공통 코드 섹션인 `.text`에 포함되어 있다. 이것은 메타데이터, 포함된 리소스, 강력한 이름, 그리고 몇 개의 네이티브 코드 상호 운용성을 위한 몇 개의 디렉토리로 구성된다. 메타데이터 디렉토리는 어셈블리의 모든 개별 .NET 엔티티(유형, 메서드, 필드, 상수, 이벤트 등)와 이들 간의 참조 및 다른 어셈블리에 대한 참조를 나열하는 테이블 집합이다.

3. 5. PE 헤더

PE 파일은 DOS 헤더, PE 시그니처, COFF 헤더, 옵션 헤더, 섹션 헤더로 구성된다.[15]

  • DOS 헤더: MS-DOS와의 호환성을 위한 헤더이다.
  • PE 시그니처: PE 파일임을 나타내는 고유 식별자("PE\0\0")이다.
  • COFF 헤더: 파일의 기본 정보를 담고 있다.
  • 옵션 헤더: PE 파일의 상세 정보를 담고 있다.
  • 섹션 헤더: 각 섹션에 대한 정보를 담고 있으며, 섹션 수만큼 존재한다.

3. 5. 1. DOS 헤더

MS-DOS와의 호환성을 유지하기 위해 PE/COFF 헤더에는 바이너리 시작 부분에 MS-DOS 프로그램이 포함되어 있다. PE 바이너리를 MS-DOS에서 실행하면 해당 MS-DOS 프로그램이 실행된다. 특별히 지정하지 않으면 "This program cannot be run in DOS mode."와 같은 "DOS에서는 실행할 수 없습니다"라는 메시지만 표시하는 프로그램이 포함된다[15]. MS-DOS 프로그램 뒤에는 PE 고유의 식별자와 COFF와 유사한 데이터 구조가 있으며, MS-DOS 헤더가 해당 오프셋을 가리킨다.

3. 5. 2. PE 시그니처

마이크로소프트는 Windows NT 3.1 운영 체제와 함께 PE 포맷을 도입했다. Win32s를 포함한 Windows 95/98/ME 및 그 이후의 모든 Windows 버전은 PE를 지원한다. PE/COFF 헤더에는 DOS와 NT 시스템의 EXE 포맷과의 호환성을 위해 바이너리 시작 부분에 MS-DOS 프로그램이 포함되어 있다. PE 바이너리를 MS-DOS에서 실행하면 이 MS-DOS 프로그램이 실행된다. 특별히 지정되지 않은 경우, 보통 "This program cannot be run in DOS mode."("DOS에서는 실행할 수 없습니다")라는 메시지를 표시하는 프로그램이 포함된다[15].

MS-DOS 프로그램 뒤에는 "PE\0\0" 시그니처[15], PE 고유 식별자, 그리고 COFF와 유사한 데이터 구조가 있으며, MS-DOS 헤더가 해당 오프셋을 가리킨다.

3. 5. 3. COFF 헤더

PE/COFF 헤더에는 PE 고유 식별자와 COFF와 유사한 데이터 구조가 있으며, DOS 헤더가 해당 오프셋을 가리킨다.[15]

3. 5. 4. 옵션 헤더

마이크로소프트는 윈도우 NT 3.1 운영 체제와 함께 PE 포맷을 도입했다. 윈도우 95/98/ME 및 윈도우 3.1x의 Win32s를 포함한 이후의 모든 윈도우 버전은 PE를 지원한다. PE/COFF 헤더에는 DOS와 NT 시스템의 EXE 포맷과의 호환성을 위해 바이너리 시작 부분에 MS-DOS 프로그램이 포함되어 있다. PE 바이너리를 MS-DOS에서 실행하면 이 MS-DOS 프로그램이 실행된다. 특별히 지정되지 않은 경우, 보통 "This program cannot be run in DOS mode."("DOS에서는 실행할 수 없습니다")라는 메시지만 표시하는 프로그램이 포함된다[15].

PE는 .NET PE 형식, 64비트 버전인 PE32+(또는 PE+), 윈도우 CE 형식 등 윈도우 플랫폼의 변화에 계속 대응하고 있다.

3. 5. 5. 섹션 헤더

마이크로소프트는 Windows NT 3.1 운영 체제와 함께 PE 포맷을 도입했다. Windows 95, Windows 98, Windows ME 및 Windows 3.1x의 Win32s를 비롯한 그 이후의 Windows는 모두 PE를 지원한다. PE/COFF 헤더에는 DOS와 NT 시스템의 EXE 포맷과의 호환성을 유지하기 위해 바이너리 시작 부분에 MS-DOS 프로그램이 포함되어 있다[15]. PE 바이너리를 MS-DOS에서 실행하면 해당 MS-DOS 프로그램이 실행되는데, 특별히 지정되지 않은 경우 "This program cannot be run in DOS mode."(DOS에서는 실행할 수 없습니다)와 같은 메시지를 표시하는 프로그램이 포함된다[15].

3. 6. 섹션

PE 파일은 코드, 데이터, 리소스 등의 내용을 여러 섹션으로 나눕니다. 각 섹션은 섹션 헤더에 의해 기술되며, 메모리에 로드될 때의 속성(읽기 가능, 쓰기 가능, 실행 가능 등)이 정의됩니다.[8][9]

일반적인 섹션은 다음과 같습니다.

섹션 이름설명
.text실행 가능한 명령이 포함된 코드 섹션입니다.
.data초기화된 전역 변수정적 변수의 초기값이 포함된 데이터 섹션입니다.
.bss초기화되지 않은 전역 변수 및 정적 변수를 위한 데이터 섹션입니다.
.rdata상수 문자열 및 임포트 테이블이 포함된 읽기 전용 데이터 섹션입니다.
.rsrc아이콘, 문자열, 대화 상자 등의 리소스가 포함된 리소스 섹션입니다.
.edataDLL이 외부로 공개하는 함수(익스포트) 정보가 포함된 익스포트 테이블 섹션입니다.
.idata실행 파일이 의존하는 DLL 정보가 포함된 임포트 테이블 섹션입니다.
.reloc실행 파일의 로드 주소가 변경될 경우 주소를 수정하기 위한 정보가 포함된 리로케이션 테이블 섹션입니다.


3. 7. 데이터 디렉터리

데이터 디렉터리는 PE 파일 내의 중요한 데이터 구조에 대한 포인터를 저장한다. 여기에는 Export Table영어(수출 테이블), Import Table영어(가져오기 테이블), Resource Table영어(리소스 테이블), Exception Table영어(예외 테이블) 등에 대한 포인터가 포함된다.[4]

데이터 디렉터리는 옵션 헤더의 끝부분에 위치하며, 다음과 같은 항목들을 포함한다.

항목 이름설명
Export Table영어수출 테이블에 대한 포인터
Import Table영어가져오기 테이블에 대한 포인터
Resource Table영어리소스 테이블에 대한 포인터
Exception Table영어예외 테이블에 대한 포인터
Certificate Table영어인증서 테이블에 대한 포인터
Base Relocation Table영어재배치 테이블에 대한 포인터
Debug영어디버그 정보에 대한 포인터
Architecture영어아키텍처 정보에 대한 포인터
Global Ptr영어전역 포인터에 대한 포인터
TLS Table영어TLS (스레드 로컬 저장소) 테이블에 대한 포인터
Load Config Table영어로드 구성 테이블에 대한 포인터
Bound Import영어바인딩된 가져오기에 대한 포인터
Import Address Table영어가져오기 주소 테이블에 대한 포인터
Delay Import Descriptor영어지연 가져오기 설명자에 대한 포인터
CLR Runtime Header영어CLR (공용 언어 런타임) 런타임 헤더에 대한 포인터
Reserved영어예약됨


3. 8. 인포트 테이블

Import Table|임포트 테이블영어은 실행 파일이 의존하는 DLL의 정보를 저장한다. 임포트 테이블은 .idata 섹션에 있으며, 다음과 같은 정보를 포함한다.[9]

  • 임포트 서술자(Import Descriptor): 의존하는 DLL마다 하나씩 존재하며, DLL 이름, 임포트 어드레스 테이블(IAT) 포인터, 힌트/이름 테이블 포인터를 포함한다.
  • 임포트 어드레스 테이블(Import Address Table, IAT): DLL 함수 주소를 저장한다. 실행 시간에 로더가 함수 주소를 확인하여 IAT를 갱신한다.
  • 힌트/이름 테이블: 임포트되는 함수 이름과 힌트(인덱스)를 저장한다.

3. 9. 엑스포트 테이블

PE영어 포맷의 익스포트 테이블은 DLL이 외부에 공개하는 함수(익스포트)의 정보를 저장한다. 익스포트 테이블은 .edata 섹션에 있으며, 다음과 같은 정보를 포함한다.[15]

  • 익스포트 디렉터리: 익스포트 테이블 관련 정보 (익스포트 테이블 버전, DLL 이름, 엔트리포인트 주소, 익스포트 주소 테이블(EAT) 포인터, 이름 테이블 포인터, 순서 테이블 포인터 등)를 포함한다.
  • 익스포트 주소 테이블 (EAT): 익스포트된 함수의 주소를 저장한다.
  • 이름 테이블: 익스포트된 함수의 이름을 저장한다.
  • 순서 테이블: 익스포트된 함수의 순서(인덱스)를 저장한다.

3. 10. 리로케이션 테이블

PE 파일은 위치 독립적 코드를 포함하지 않는다. 대신 우선되는 베이스 주소로 컴파일되고, 모든 절대 주소는 미리 고정된다. 만약 PE 파일이 우선 주소에 로드될 수 없는 경우(다른 파일이 이미 그 위치에 있는 경우), 운영 체제는 베이스 주소를 변경한다. 이때 모든 절대 주소를 다시 계산하고 새로운 값을 사용하도록 코드를 수정해야 한다. 로더는 우선 주소와 실제 로드된 주소를 비교하여 그 차이(델타 값)를 계산함으로써 이 작업을 수행한다. 그런 다음 우선 주소에 새 주소 값을 더한다. 베이스 재배치는 메모리 위치에 목록으로 저장된다. 결과 코드는 프로세스에 고유하게 되므로 공유할 수 없게 되어, DLL의 많은 메모리 절약 이점이 사라진다. 또한 모듈 로딩 시간도 상당히 길어진다. 이러한 이유로 재배치는 가능한 한 피해야 하며, 마이크로소프트 DLL은 주소가 겹치지 않도록 만들어진다.[15]

4. 다른 운영 체제에서의 사용

x86 유닉스 계열 운영 체제에서 윈도우 바이너리(PE 형식)는 Wine을 사용하여 실행할 수 있다.[24] HX DOS Extender는 네이티브 DOS 32비트 바이너리에 PE 형식을 사용하며, DOS에서 일부 윈도우 바이너리를 실행할 수 있어 DOS용 Wine과 유사하게 작동한다.

ReactOS는 윈도우와의 바이너리 호환성을 목표로 개발된 오픈 소스 운영체제이므로 PE 포맷을 사용한다.[10] SkyOS와 BeOS R3 같은 다른 운영체제에서도 사용되었으나, 이들은 결국 ELF로 전환되었다.

Mac OS X 10.5는 PE 파일을 로드하고 분석할 수 있지만, 윈도우와의 바이너리 호환성은 없다.[10]

UEFI 및 EFI 펌웨어는 PE 파일과 윈도우 ABI x64 호출 규약을 응용 프로그램에 사용한다.

Mono 개발 플랫폼은 마이크로소프트 .NET Framework와 바이너리 호환성을 목표로 하며, 마이크로소프트 구현과 동일한 PE 형식을 사용한다. 마이크로소프트의 자체 크로스 플랫폼인 .NET Core도 마찬가지이다.

5. 관련 도구

PE 파일의 구조를 보거나 내용을 수정할 수 있는 다양한 도구들이 있다.


  • CFF Explorer: 닷넷 프레임워크를 지원하는 최초의 PE 편집기이다.[1]
  • PE Explorer: PE 파일 뷰어/편집기(셰어웨어)이다.[2]
  • LordPE: 덤퍼가 포함된 PE 편집기이다.[3]
  • GNU Binutils: PE 포맷을 지원하는 도구 모음이다.[4]
  • pefile: 파이썬 PE 파일 파싱 모듈이다.[5]

참조

[1] 웹사이트 application/vnd.microsoft.portable-executable https://www.iana.org[...] IANA 2015-04-23
[2] 웹사이트 Portable executable (PE) - Definition - Trend Micro IN https://www.trendmic[...] 2022-11-10
[3] 웹사이트 UEFI Specification, version 2.8B https://uefi.org/sit[...]
[4] 웹사이트 PE Format (Windows) https://msdn.microso[...] 2017-10-21
[5] 웹사이트 /STUB (MS-DOS Stub File Name) http://msdn.microsof[...] 2021-08-03
[6] 블로그 PE trick explained: Telling 32 and 64 bit apart with naked eye https://gdatasoftwar[...]
[7] 웹사이트 PE Format https://docs.microso[...]
[8] 웹사이트 The Portable Executable File From Top to Bottom http://www.csn.ul.ie[...] 2017-10-21
[9] 웹사이트 Peering Inside the PE: A Tour of the Win32 Portable Executable File https://msdn.microso[...] 2017-10-21
[10] 웹사이트 Uncovered: Evidence that Mac OS X could run Windows apps soon https://arstechnica.[...] 2007-12-03
[11] 웹사이트 application/vnd.microsoft.portable-executable https://www.iana.org[...] IANA 2015-04-23
[12] 웹사이트 UEFI 仕様書 version 2.4 http://www.uefi.org/[...] 2019-07-17
[13] 웹사이트 The EFI Boot Stub https://www.kernel.o[...] 2019-07-17
[14] 웹사이트 PE Format (Windows) https://msdn.microso[...] 2017-10-21
[15] 웹사이트 PE Format https://docs.microso[...] 2019-03-18
[16] 웹사이트 技術者必見!!Part2 Windows NT 4.0のあまり知られていない事実 https://pc.watch.imp[...] 1996-05-07
[17] 웹사이트 [PATCH] Xbox PE subsystem support https://binutils.sou[...] 2004-11-25
[18] 웹사이트 Building an Xbox 360 Emulator, part 3: Feasibility/OS http://www.noxa.org/[...] 2011-02-28
[19] Github https://github.com/t[...]
[20] 웹사이트 Uncovered: Evidence that Mac OS X could run Windows apps soon https://arstechnica.[...] 2007-12-03
[21] 웹인용 application/vnd.microsoft.portable-executable https://www.iana.org[...] IANA 2015-04-23
[22] 웹인용 UEFI Specification, version 2.4 http://www.uefi.org/[...]
[23] 웹인용 UEFI Specification, version 2.4 http://www.uefi.org/[...]
[24] 웹사이트 /STUB switch http://msdn.microsof[...]
[25] 웹인용 Uncovered: Evidence that Mac OS X could run Windows apps soon http://arstechnica.c[...] 2016-02-11



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com