Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
savedCS = 4 savedIP = 2 savedBP = 0 savedDS = -2
EMAGIC = 05A4Dh ERESWDS = 0010h ENEWHDR = 003Eh ENEWEXE = 0040h
EXE_HDR STRUC e_magic DW ? ; magic in same location e_cblp DW ? e_cp DW ? e_crlc DW ? e_cparhdr DW ? e_minalloc DW ? e_maxalloc DW ? e_ss DW ? e_sp DW ? e_csum DW ? e_cs DW ? e_ip DW ? e_lfarlc DW ? e_ovno DW ? e_res DW ERESWDS DUP (?) e_lfanew DD ? EXE_HDR ENDS
NEMAGIC = 454Eh NERESBYTES = 0
NEW_EXE STRUC ne_magic DW ? ; Magic value 'NE' ne_ver DB ? ; version number ne_rev DB ? ; revision number ne_enttab DW ? ; offset to entry table ne_cbenttab DW ? ; number of bytes in entry table
ne_crc DD ? ; CRC of file
ne_flags DW ? ; flag word ne_autodata DW ? ; segment number of auto data segment ne_heap DW ? ; initial size of local heap ne_stack DW ? ; initial size of stack
ne_csip DD ? ; CS:IP start address ne_sssp DD ? ; SS:SP initial stack pointer. 0 if ; stack size word non-zero
ne_cseg DW ? ; number of segment in segment table ne_cmod DW ? ; number of entries in module reference table ne_cbnrestab DW ? ; number of bytes in non-resident name table
ne_segtab DW ? ; NE relative offset to segment table ne_rsrctab DW ? ; NE relative offset to resource table ne_restab DW ? ; NE relative offset to resident name table ne_modtab DW ? ; NE relative offset to module reference table ne_imptab DW ? ; NE relative offset to imported name table ne_nrestab DD ? ; file offset to non-resident name table ne_cmovent DW ? ; Count of movable entries ne_align DW ? ; Alignment shift count for segment data ne_cres DW ? ; Count of resource segments ne_exetyp DB ? ; Target operating system ne_flagsothers DB ? ; Other .EXE flags ne_pretthunks DW ? ; offset to return thunks ne_psegrefbytes DW ? ; offset to segment ref. bytes ne_swaparea DW ? ; Minimum code swap area size ne_expver DW ? ; Expected Windows version number NEW_EXE ENDS
; Chksum not supported unless ne_psegcsum defined in NEW_EXE structure
ne_psegcsum = word ptr ne_exetyp ne_onextexe = word ptr ne_crc
; New 3.0 Gang Load area description
ne_gang_start = ne_pretthunks ne_gang_length = ne_psegrefbytes
NEW_EXE1 STRUC DW ? ne_usage DW ? DW ? ne_pnextexe DW ? ne_pautodata DW ? ne_pfileinfo DW ? NEW_EXE1 ENDS
NENOTP = 8000h ; Not a process (i.e. a library module) NEPRIVLIB = 4000h ; A library which lives above the line NEIERR = 2000h ; Errors in image NEAPPTYP = 0700h ; Application type mask NENOTWINCOMPAT = 0100h ; Not compatible with P.M. Windowing NEWINCOMPAT = 0200h ; Compatible with P.M. Windowing NEWINAPI = 0300h ; Uses P.M. Windowing API NEFLTP = 0080h ; Floating-point instructions NEI386 = 0040h ; 386 instructions NEI286 = 0020h ; 286 instructions NEI086 = 0010h ; 8086 instructions NEPROT = 0008h ; Runs in protected mode only NEPPLI = 0004h ; Per-Process Library Initialization NEINST = 0002h ; Instance data NESOLO = 0001h ; Solo data
; Below are the private bits used by the Windows 2.0 loader. All are ; in the file, with the exception of NENONRES and NEWINPROT which are ; runtime only flags. ;
NEWINPROT = NEIERR NENONRES = NEFLTP ; Contains non-resident code segments NEALLOCHIGH = NEI386 ; Private allocs above the line okay NEEMSSEPINST = NEI286 ; Want each instance in separate NELIM32 = NEI086 ; Uses LIM 3.2 API (Intel Above board)
; Following private bit is a runtime only flag used only ROM Windows.
NEMODINROM = NEEMSSEPINST ; Module loaded from ROM
; ; Format of NE_FLAGSOTHERS(x): ; ; 7 6 5 4 3 2 1 0 - bit no ; | | | | ; | | | +---------------- Support for long file names ; | | +------------------ 2.x app runs in protect mode ; | +-------------------- 2.x app gets prop. font ; +---------------------- Contains gangload area ;
NELONGNAMES = 1h NEINFONT = 2h ; WIN30 - 2.x app runs in 3.x prot mode NEINPROT = 4h ; WIN30 - 2.x app gets proportional font NEGANGLOAD = 8h ; WIN30 - Contains gangload area NEASSUMENODEP = 10h ; WIN40 - DllEntryPoint known not to exit NEINTLAPP = 40h ; WIN31 - intl versions use this. NEHASPATCH = 80h ; WIN40 - Some segs of this module get patched
; Target operating systems
NE_UNKNOWN = 0 ; Unknown (any "new-format" OS) NE_OS2 = 1 ; Microsoft/IBM OS/2 (default) NE_WINDOWS = 2 ; Microsoft Windows NE_DOS4 = 3 ; Microsoft MS-DOS 4.x NE_DEV386 = 4 ; Microsoft Windows 386
ifndef NO_APPLOADER NEAPPLOADER = 0800h ; set if application has its own loader endif ;!NO_APPLOADER
NEW_SEG STRUC ns_sector DW ? ; logical sector number in file of start of segment ns_cbseg DW ? ; number bytes in file ns_flags DW ? ; segment flags ns_minalloc DW ? ; minimum number bytes to allocate for segment NEW_SEG ENDS
NEW_SEG1 STRUC DB SIZE NEW_SEG DUP (?) ns_handle DW ? ; Handle to segment (0 if not loaded) NEW_SEG1 ENDS
NSTYPE = 0007h ; Segment type mask NSCODE = 0000h ; Code segment NSDATA = 0001h ; Data segment NSITER = 0008h ; Iterated segment data NSMOVE = 0010h ; Moveable segment NSSHARE = 0020h ; Shareable segment NSPRELOAD = 0040h ; Preload this segment NSERONLY = 0080h ; EXECUTE ONLY code/READ ONLY data segment NSRELOC = 0100h ; Relocation information following segment data NSDPL = 0C00h ; 286 DPL bits NSDISCARD = 1000h ; Discard priority bits NS286DOS = 0EE06h ; These bits only used by 286DOS
NSALIGN = 9 ; Default alignment shift count for seg. data
NSALLOCED = 0002h ; set if ns_handle points to uninitialized mem. NSLOADED = 0004h ; set if ns_handle points to initialized mem. NSUSESDATA = 0400h ; set if an entry point in this segment uses ; the automatic data segment of a SOLO library
NSGETHIGH = 0200h NSINDIRECT = 2000h NSWINCODE = 4000h ; flag for code
NSKCACHED = 0800h ; cached by kernel NSPRIVLIB = NSITER NSNOTP = 8000h
NSINROM = NSINDIRECT ; segment is loaded in ROM NSCOMPR = NSGETHIGH ; segment is compressed in ROM
ifndef NO_APPLOADER NSCACHED = 8000h ;* in AppLoader Cache endif ;!NO_APPLOADER
NEW_RSRC STRUC rs_align DW ? NEW_RSRC ENDS
RSORDID = 08000h ; If high bit of rt_id or rn_id set then integer id
RSRC_TYPEINFO STRUC rt_id DW ? rt_nres DW ? rt_proc DD ? RSRC_TYPEINFO ENDS
RSRC_NAMEINFO STRUC rn_offset DW ? rn_length DW ? rn_flags DW ? rn_id DW ? rn_handle DW ? rn_usage DW ? RSRC_NAMEINFO ENDS RNMOVE = 00010h ; Moveable resource RNPURE = 00020h ; Pure resource (read only) RNPRELOAD = 00040h ; Preload this resource RNDISCARD = 01000h ; Discard bit RNLOADED = 00004h ; True if handler proc return handle RNCOMPR = 00200h ; Resource is compressed in ROM RNINROM = 02000h ; Resource is loaded in ROM (run time flag)
RNUNUSED = 0CD8Bh ; Unused resource flags
ENTFIXED STRUC entflags DB ? entoffset DW ? ENTFIXED ENDS
if SWAPPRO
ENTMOVEABLE STRUC DB ? ; Entry flags entsar DB 5 DUP (?) ; sar cs:[xxxx] instruction DW ? ; INT 0F0H for swap profiler entjmpfarop DB ? entjmpfaroff DW ? entjmpfarseg DW ? ENTMOVEABLE ENDS
ENTSWAPPED STRUC DB ? ; Entry flags DB 5 DUP (?) ; sar cs:[xxxx] instruction DW ? ; INT 0F0H for swap profiler entintop DB ? entintvec DB ? entintsegno DB ? entintoff DW ? ENTSWAPPED ENDS
else ; no swap profiler
ENTMOVEABLE STRUC DB ? ; Entry flags entsar DB 5 DUP (?) ; sar cs:[xxxx] instruction entjmpfarop DB ? entjmpfaroff DW ? entjmpfarseg DW ? ENTMOVEABLE ENDS
ENTSWAPPED STRUC DB ? ; Entry flags DB 5 DUP (?) ; sar cs:[xxxx] instruction entintop DB ? entintvec DB ? entintsegno DB ? entintoff DW ? ENTSWAPPED ENDS
endif ; if swap profiler
errnz <SIZE ENTMOVEABLE - SIZE ENTSWAPPED>
PENT STRUC penttype DB ? pentflags DB ? pentsegno DB ? pentoffset DW ? PENT ENDS
PM_EntStruc STRUC PM_EntStart dw ? PM_EntEnd dw ? PM_EntNext dw ? PM_EntStruc ENDS
ENT_UNUSED = 000h ENT_ABSSEG = 0FEh ENT_MOVEABLE = 0FFh ENT_PUBLIC = 001h ENT_DATA = 002h INTOPCODE = 0CDh
if SWAPPRO SWAPVECTOR = 0F0h endif
NEW_RLCINFO STRUC nr_nreloc DW ? NEW_RLCINFO ENDS
NEW_RLC STRUC nr_stype DB ? nr_flags DB ? nr_soff DW ? nr_mod DW ? nr_proc DW ? NEW_RLC ENDS nr_segno EQU nr_flags+3 nr_entry EQU nr_proc
NRSTYP = 07h NRSBYTE = 00h NRSSEG = 02h NRSPTR = 03h NRSOFF = 05h
NRADD = 04h NRRTYP = 03h NRRINT = 00h NRRORD = 01h NRRNAM = 02h OSFIXUP = 03h
|