Advertisement
Guest User

Untitled

a guest
May 28th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. section .data
  2.     file        db 'test.txt', 0
  3.     error_msg   db 'Error occured : closing program!',10,0
  4.     msg_size    equ $-error_msg
  5.  
  6. %define O_WRONLY 1
  7. %define O_CREAT 64
  8.  
  9. section .text
  10.     global _start
  11.    
  12. _start:
  13.     enter 0,0
  14.    
  15.     push file
  16.     call write_on_file 
  17.     call exit
  18.    
  19. write_char:
  20.     push ebp
  21.     mov ebp, esp
  22.    
  23.     lea ecx, [esp+8]    ; On met dans ecx, l'adresse du caractère à afficher
  24.     mov ebx, [esp+12]   ; file-descriptor
  25.     mov edx, 1          ; taille
  26.     mov eax, 4          ; write
  27.     int 0x80
  28.    
  29.     mov esp,ebp
  30.     pop ebp
  31.     ret
  32.    
  33. write_string:
  34.     push ebp
  35.     mov ebp, esp
  36.    
  37.     mov ecx, [esp+8]    ; On met dans ecx, l'adresse de la chaine
  38.     mov ebx, 1          ; STDOUT
  39.     mov edx, [esp+12]   ; taille
  40.     mov eax, 4          ; write
  41.     int 0x80
  42.    
  43.     mov esp,ebp
  44.     pop ebp
  45.     ret
  46.    
  47.    
  48. write_on_file: 
  49.     push ebp
  50.     mov ebp, esp
  51.    
  52.     mov ecx, O_WRONLY
  53.     mov ebx, [esp+8]        ; fichier à ouvrir
  54.     mov eax, 5              ; open
  55.     int 0x80
  56.  
  57.     sub esp, 4              ; variable local pour le buffer
  58.     sub esp, 4              ; variable pour FD
  59.        
  60.     test eax, eax           ; Si open renvoit -1, on affiche une erreur
  61.     js error
  62.    
  63.     mov [ebp-8], eax        ; On met le FD de open dans ebp-8
  64.     loop:
  65.     cmp dword[ebp-4], -1    ; On boucle tant qu'on a pas de EOF
  66.     je exit
  67.    
  68.     lea ecx, [ebp-4]        ; On passe l'adresse du buffer à read_stdin_char
  69.     push ecx
  70.     call read_stdin_char
  71.     push dword[ebp-8]       ; Puis on appelle write_char avec le FD de fichier
  72.     push dword[ebp-4]
  73.     call write_char
  74.    
  75.     jmp loop
  76.    
  77.     push eax                ; On ferme le fichier
  78.     call close
  79.     pop eax
  80.    
  81.     mov esp, ebp
  82.     pop ebp
  83.     ret
  84.    
  85. exit:
  86.     mov eax, 1
  87.     mov ebx, 0x0
  88.     int 0x80
  89.     ret
  90.    
  91. error:
  92.     push ebp
  93.     mov ebp, esp
  94.    
  95.     push msg_size
  96.     push error_msg
  97.     call write_string   ; On affiche une erreur
  98.     call exit           ; Et on quitte le programme
  99.    
  100.     mov esp, ebp
  101.     pop ebp
  102.     ret
  103.    
  104. close:
  105.     push ebp
  106.     mov ebp, esp
  107.    
  108.     mov ebx, [esp+8]    ; FD à fermer
  109.     mov eax, 6          ; close
  110.     int 0x80
  111.    
  112.     mov esp, ebp
  113.     pop ebp
  114.     ret
  115.    
  116. read_stdin_char:
  117.     push ebp
  118.     mov ebp, esp
  119.    
  120.     mov ebx, 0          ; STDIN
  121.     mov ecx, [esp+8]    ; Caractère de buffer
  122.     mov edx, 1          ; Un seul caractère
  123.     mov eax, 3          ; read
  124.     int 0x80
  125.    
  126.     mov esp, ebp
  127.     pop ebp
  128.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement