14H |
void far *ip |
2 |
Wartość rejestru IP (wskaźnika instrukcji) na początku procesu |
16H |
2 |
Przesunięcie segmentu CS (do ustalania na początku procesu) | |
18H |
short relocpos |
2 |
Początek tablicy przemieszczeń - adres pierwszej pozycji tablicy relokacji w stosunku do początku pliku. Jeżeli pole jest równe 40h lub więcej, jest to nowy plik EXE |
1AH |
short noverlay |
2 |
Numer nakładki (0 - dla modułu bazowego) |
ICH |
char extra[] |
Inne informacje - obszar ten jest wykorzystywany przez MS WINDOWS do pamiętania ikon związanych z programem | |
18H] |
void far *relocs[] |
4*[6] |
Tablica przemieszczeń (typu offset,segment) |
? |
? Wypełnienie zerami do końca paragrafu | ||
? |
? Początek kodu programu |
Ładowanie i uruchamianie plików EXE:
(jest tylko trochę bardziej skomplikowane niż ładowanie plików .COM)
• wczytanie nagłówka pliku (sprawdzenie numeru magicznego)
• znalezienie odpowiedniego miejsca w pamięci (pola minalloc i maxalloc mówią ile dodatkowej pamięci trzeba zaalokować na końcu załadowanego programu)
• utworzenie PSP (Program Segment Prefix) na początku programu
• wczytanie kodu do pamięci bezpośrednio za PSP
• adres zapisany w kodzie jest adresem względnym w danym segmencie i razem z plikiem trzymana jest tablica relokacji (relocpos), czyli spis wszystkich miejsc, które trzeba poprawić przy relokacji danego segmentu. Przy ładowaniu we wszystkich miejscach wskazanych w tablicy relokacji dodawana jest liczba o jaką przesunięty jest segment
• ustawiamy wskaźnik stosu na sp i przeskakujemy do ip w celu wykonania programu
Jest to opis pliku tzw. old executables, czyli pliku EXE dla systemu DOS. Istnieją jeszcze pliki new executables działające w środowiskach wykorzystujących tryb chroniony.
Pliki new executables mają inną budowę od poprzednich. Na ich początku znajduje się krótki programik działający w systemie DOS, tzw. STUB. Jego zadaniem jest informowanie użytkownika, że plik zawiera program nie działający w systemie DOS, lub próbuje uruchomić zawartego w pliku