Let's Get Rid of Modules or Single Task Inter Process Communication for V2_OS An executable file has no header, just code that is loaded in memory and executed. The code is loaded at offset 0 in a segment that is just big enough to load the file. The segment is aligned on a 64 bytes boundary. The code is launched by a far call. The registers are set as follows: ds = a writable alias for the code segment gs = selector of the 4 GB segment; NEVER CHANGE ITS VALUE since even interrupt handlers rely on it ss = gs esp = points to the stack at the top of physical memory or linear address space CF (carry flag) indicates that a special execution mode is requested. If it is not set, following registers are defined: gs:esi = pointer to the path of the executable file gs:edi = pointer to the command line (without the filename) If CF is set, the execution mode is indicated in eax; currently, following values and additional registers are defined: 1 = load: the executable only initializes and prepares to be called again with other execution modes; gs:esi and gs:edi are as in default mode 2 = unload: the executable cleans up and prepares to be deleted from memory; valid only after an execution in load mode; no additional registers Every executable can support any additional execution modes, but to prevent conflicts with future extensions, experimental execution modes should have identifiers greater than 65535 (0ffffh). If an execution mode is not supported, the executable should return immediately.