Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.Sign up
small stub that allows to run "bare" 64-bit PE binaries in DOS
|Type||Name||Latest commit message||Commit time|
|Failed to load latest commit information.|
1. What is dos64stb good for? dos64stb is a small stub that is supposed to be added to a 64-bit PE binary ( thru the link step ). It is the program that is executed when the binary is launched in DOS. dos64stb will do this: - check if the cpu is 64-bit - check if the PE image is "acceptable" - check if enough XMS memory is available to load the image - load the image into extended memory - setup GDT and switch to protected-mode - handle relocation info ( the image MUST contain base relocations ) - setup IDT and page tables for 64-bit PAE paging - install a small "OS" (int 21h/31h) that allows the image to call real-mode DOS functions that don't need pointer translation. - reprogram master PIC, so IRQs 00h-07h are mapped to Int 78h-7fh - enable paging; call the entry point of the loaded 64-bit image 2. Requirements to run an image with the dos64stb-stub one needs: - a 64-bit CPU - an installed DOS - an installed XMS host - enough extended memory to load the image 3. Hot to use dos64stub? The stub is added to a 64-bit binary thru the link step. See file Makefile for how to do this with MS link or jwlink. The image must meet the following requirements: - Subsystem has to be "native"; avoids the image being loaded in Win64 - image must contain base relocations - no dll references ("imports") are possible - base of image must be < 4 GB There are 2 samples supplied, Mon64.asm and TestC.c. Mon64 allows to display a few 64-bit resources. It also shows how the Int21 emulation installed by dos64stb is supposed to be used. TestC, the second sample, just shows how C source may be used with the stub. TestC.mak is supplied, which creates the binary using MSVC ( and JWasm, needed to assemble the micro-printf implementation in printf.asm ). dos64stb installs a tiny subset of the DPMI API. The functions that are supported are: - int 21h, ah=4Ch: terminate program - int 31h, ax=203h: set exception vector BL to CX:RDX - int 31h, ax=300h: simulate real-mode interrupt BL, RDI=real-mode call structure. 4. Memory Layout The 64-bit binary runs in ring 0, 64-bit long mode. The first 64 GB of memory are "identity mapped" by the stub. This may be adjusted in dosstb64.asm. When launched, dos64stb allocates a memory block in extended memory and initializes it like this (from lower to higher addresses): - Page Tables (default: 1+1+64 pages) - IDT (1 page) - 64-bit PE image - stack - heap (optionally) 5. License the source is distributed under the GNU GPL 2 license. See file COPYING for details. It was written by Andreas Grech.