Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. format ELF
  2.  
  3. section '.text' executable
  4.  
  5. public start_
  6.  
  7. extrn main
  8.  
  9. buf_len = 0x400
  10. max_parameters=0x20
  11.  
  12. start_:
  13.         db 'MENUET01'   ; 1. Magic number (8 bytes)
  14.         dd 0x01         ; 2. Version of executable file
  15.         dd start__      ; 3. Start address
  16.         dd 0x0          ; 4. Size of image
  17.         dd 0x100000     ; 5. Size of needed memory
  18.         dd 0x100000     ; 6. Pointer to stack
  19. hparams dd params       ; 7. Pointer to program arguments
  20. hpath   dd path         ; 8. Pointer to program path
  21.  
  22.         start__:
  23.  
  24.         ;init heap of memory
  25.         mov eax,68
  26.         mov ebx,11
  27.         int 0x40
  28.  
  29.         mov ebx,path
  30.         mov ecx,dword buf_len
  31.         add ebx,ecx
  32.  
  33.         next_simbol_check:
  34.         xor eax,eax
  35.         mov al,[ebx]
  36.         cmp al,'/'
  37.         je simbol_fined
  38.         dec ebx
  39.         dec ecx
  40.         jnz next_simbol_check
  41.  
  42.         simbol_fined:
  43.         inc ebx
  44.  
  45.         mov [argc],dword 1
  46.         mov edx,argv
  47.         mov [edx],ebx   ;argument number 0 - program name
  48.  
  49.         cmp [params],byte 0
  50.         je exit_find_params
  51.        
  52.         mov [argc],dword 2
  53.         mov ebx,params
  54.         add edx,4
  55.         mov [edx],ebx
  56.  
  57.         next_symbol_parse:
  58.                 xor eax,eax
  59.                 mov al,[ebx]
  60.                 test al,al
  61.                 jz exit_find_params
  62.                 cmp al,' '
  63.                 je save_param
  64.        
  65.                 inc ebx
  66.         jmp next_symbol_parse
  67.         save_param:
  68.  
  69.         mov [ebx],byte 0
  70.         inc ebx
  71.         add edx,4
  72.         mov [edx],ebx
  73.         inc [argc]
  74.        
  75.         cmp [argc],max_parameters
  76.         jae exit_find_params
  77.  
  78.         jmp next_symbol_parse
  79.  
  80.         exit_find_params:
  81.  
  82.         push argv
  83.         push [argc]
  84.  
  85.         call main
  86. exit:
  87.  
  88.         xor  eax,eax
  89.         dec  eax
  90.         int  0x40
  91.         dd   -1
  92. crash:
  93.         jmp  exit
  94.  
  95. public params as '__argv'
  96. public path as '__path'
  97.  
  98. section '.bss'
  99. argc     rd 1
  100. argv     rd max_parameters
  101. path     rb buf_len
  102. params   rb buf_len
  103.