EXE
Spis treści |
EXE (od ang. executable [file], [plik] wykonywalny; pot. „egzek” od skr. exec) – rozszerzenie nazwy pliku wykonywalnego w systemach Microsoft Windows i MS-DOS; pliki o tym rozszerzeniu w zamierzeniu zawierają przede wszystkim skompilowany kod wykonywalny programu, choć może zawierać także inne zasoby (np. dotyczące np. struktury okien, ikony, obrazy, dźwięki, itp.).
Sygnatura pliku to sekwencja bajtów, zwykle na początku pliku, pomagająca zidentyfikować format pliku (jest to kolejny element potwierdzający po rozszerzeniu pliku); w przypadku plików wykonywalnych EXE (oraz innych, mających identyczną strukturę, m.in. DLL, OCX, ACM, AX, IME, MUI, RLL, TSP, CPL, DRV, VXD, SCR i niektóre SYS) najczęściej dwoma pierwszymi znakami są litery „MZ” pochodzące od inicjałów autora, Marka Zbikowskiego[1]. Plik EXE może zawierać kod wykonywalny w różnych formatach (zależny przykładowo od systemu operacyjnego, zob. dalej), pliki binarne typu Portable Executable, w dalszej części zawierają litery „PE”; w przypadku kompresji (czy przeróżnych zabezpieczeń), można znaleźć inne litery wskazujące użyte narzędzie, np. UPX, czy SPX.
[edytuj] Formaty
Istnieje kilka głównych formatów plików wykonywalnych:
- 16-bitowy plik wykonywalny DOS formatu MZ – oryginalny format pliku wykonywalnego systemu DOS, identyfikowany za pomocą dwóch znaków „MZ” ASCII na początku pliku; ma relatywnie małe możliwości.
- 16-bitowy (New Executable, „nowy wykonywalny”, tzn. nowy typ pliku wykonywalnego) – używany w wielowątkowym systemie DOS 4.0 i w 16-bitowych wersjach Microsoft Windows, identyfikowany za pomocą liter „NW” na początku pliku; nie zdobył wielkiej popularności, nie mógł być uruchamiany w pozostałych wersjach systemu DOS, lecz możliwe to było w przypadku 32-bitowych wersji systemów Windows i OS/2.
- 32-bitowy (Linear Executable, „liniowy [plik] wykonywalny”) – wprowadzony w OS/2 2.0, identyfikowany znakami „LX” na początku pliku; może być uruchomiany w systemie OS/2 w wersji począwszy od 2.0.
- Mieszany 16/32-bitowy (Linear Executable) wprowadzony w OS/2 2.0, identyfikowany za pomocą początkowych znaków „LE”; nie używany w OS/2, znalazł zastosowanie w sterownikach VxD systemów Windows 3.x i Windows 9x.
- 32-bitowy (Portable Executable, „przenośny [plik] wykonywalny”) – wprowadzony w Windows NT, identyfikowany za pomocą znaków „PE” ASCII; wykonywalny we wszystkich systemach Windows NT oraz Windows 95 i nowszych, a nawet systemie DOS rozszerzonym za pomocą ekstendera HX, wykorzystywany ponadto w BeOS R3 (format tam użyty narusza jednak specyfikację tego formatu).
- 64-bitowy (Portable Executable) – wersja dla 64-bitowych systemów Windows, może być uruchamiany tylko w 64-bitowych systemach Windows.
- Pozostałe
Poza powyższymi istnieją także niestandardowe formaty, takie jak W3 (biblioteka plików LE, używana wyłącznie w WIN386.EXE), W4 (skompresowany zbiór plików LE, używany tylko w Vmm32.vxd), DL, MP , P2, P3 (trzy ostatnie używane przez extender Phar Lap).
W przypadku plików wykonywalnych w formacie 16- i 32-bitowym dla systemu Windows standardową procedurą jest rozpoczęcie ich za pomocą krótkiego programu rozpoczynającego się sygnaturą „MZ” (tzw. stub). Jego przeznaczeniem jest zwykle poinformowanie o tym, że jest to program dla systemu Windows (zazwyczaj w postaci tekstu „This program cannot be run in DOS mode.” lub „Ten program nie może być uruchomiony w trybie DOS.”), choć możliwe jest umieszczenie w tym miejscu innego kodu (korzystając z odpowiedniej opcji konsolidatora), np. wersji programu dla systemu DOS. Zasadnicza część danego programu, tzn. fragment przeznaczony dla systemu Windows ma sygnaturę „NE” lub „PE” – kod zaczynający się od sygnatury „MZ” jest wówczas ignorowany. Niemniej kod „PE” może być wykonany w systemie DOS przy użyciu wspomnianego wyżej extendera DOS HX.