; Header for Linux program format ELF executable 3 entry start ; for system calls include 'unistd.inc' macro __mov a,b { if b eq else if ~(b eqtype 1) mov a, b else if b = 0 xor a, a else if (b < 0x80) & (b >= -0x80) push b pop a else mov a, b end if } macro kercall a,b,c,d,e,f,g { __mov eax, a __mov ebx, b __mov ecx, c __mov edx, d __mov esi, e __mov edi, f __mov ebp, g int 0x80 } macro stdcall func,[arg] { reverse pushd arg common call func } PROT_READ = 0x1 ; page can be read PROT_WRITE = 0x2 ; page can be written PROT_EXEC = 0x4 ; page can be executed PROT_SEM = 0x8 ; page may be used for atomic ops PROT_NONE = 0x0 ; page can not be accessed PROT_GROWSDOWN = 0x01000000 ; mprotect flag: extend change to start of growsdown vma PROT_GROWSUP = 0x02000000 ; mprotect flag: extend change to end of growsup vma MAP_SHARED = 0x01 ; Share changes MAP_PRIVATE = 0x02 ; Changes are private MAP_TYPE = 0x0f ; Mask for type of mapping MAP_FIXED = 0x10 ; Interpret addr exactly MAP_ANONYMOUS = 0x20 ; don't use a file O_ACCMODE = 00000003 O_RDONLY = 00000000 O_WRONLY = 00000001 O_RDWR = 00000002 O_CREAT = 00000100 ; not fcntl O_EXCL = 00000200 ; not fcntl O_NOCTTY = 00000400 ; not fcntl O_TRUNC = 00001000 ; not fcntl O_APPEND = 00002000 O_NONBLOCK = 00004000 O_DSYNC = 00010000 ; used to be O_SYNC, see below FASYNC = 00020000 ; fcntl, for BSD compatibility O_DIRECT = 00040000 ; direct disk access hint O_LARGEFILE = 00100000 O_DIRECTORY = 00200000 ; must be a directory O_NOFOLLOW = 00400000 ; don't follow links O_NOATIME = 01000000 O_CLOEXEC = 02000000 ; set close_on_exec __O_SYNC = 04000000 O_SYNC = (__O_SYNC + O_DSYNC) O_NDELAY = O_NONBLOCK segment readable executable