1 %line 1+1 write_file.asm 2 3 4 5 [section .data] 6 LF equ 10 7 NULL equ 0 8 TRUE equ 1 9 FALSE equ 0 10 EXIT_SUCCESS equ 0 11 STDIN equ 0 12 STDOUT equ 1 13 STDERR equ 2 14 SYS_read equ 0 15 SYS_write equ 1 16 SYS_open equ 2 17 SYS_close equ 3 18 SYS_fork equ 57 19 SYS_exit equ 60 20 SYS_creat equ 85 21 SYS_time equ 201 22 O_CREAT equ 0x40 23 O_TRUNC equ 0x200 24 O_APPEND equ 0x400 25 O_RDONLY equ 0 26 O_WRONLY equ 1 27 O_RDWR equ 2 28 S_IRUSR equ 400 29 S_IWUSR equ 200 30 S_IXUSR equ 100 31 32 00000000 0A0A00 newline db LF, LF, NULL 33 00000003 0A66696C6520777269- header db LF, "file write test", LF, NULL 34 00000003 746520746573740A00 35 00000015 75726C2E74787400 filename db "url.txt", NULL 36 0000001D 2F686F6D652F726E7A- url db "/home/rnzuser/Scrivania", LF, NULL 37 0000001D 757365722F53637269- 38 0000001D 76616E69610A00 39 00000036 1800000000000000 len dq $-url-1 40 0000003E 736372697474757261- writedone db "scrittura completata!", LF, NULL 41 0000003E 20636F6D706C657461- 42 0000003E 7461210A00 43 00000055 0000000000000000 filedescript dq 0 44 0000005D 6572726F7265206E65- erroropenmsg db "errore nell'apertura del file ", LF, NULL 45 0000005D 6C6C27617065727475- 46 0000005D 72612064656C206669- 47 0000005D 6C65200A00 48 0000007D 6669696C6520777269- errorwritemsg db "fiile writing error", LF, NULL 49 0000007D 74696E67206572726F- 50 0000007D 720A00 51 52 [section .text] 53 [global _start] 54 _start: 55 56 00000000 48C7C7[00000000] mov rdi, header 57 00000007 E89D000000 call printstring 58 59 60 0000000C 48C7C7[00000000] mov rdi, header 61 00000013 E891000000 call printstring 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 openinputfile: 77 00000018 48C7C055000000 mov rax, SYS_creat 78 0000001F 48C7C7[00000000] mov rdi, filename 79 00000026 48C7C680010000 mov rsi, S_IRUSR | S_IWUSR 80 0000002D 0F05 syscall 81 82 0000002F 4883F800 cmp rax, 0 83 00000033 7C4B jl erroronopen 84 85 00000035 48890425[00000000] mov qword[filedescript], rax 86 87 88 89 90 91 92 93 94 95 96 97 98 0000003D 48C7C001000000 mov rax, SYS_write 99 00000044 488B3C25[00000000] mov rdi, qword[filedescript] 100 0000004C 48C7C6[00000000] mov rsi, url 101 00000053 488B1425[00000000] mov rdx, qword[len] 102 0000005B 0F05 syscall 103 104 0000005D 4883F800 cmp rax, 0 105 00000061 7C2B jl erroronwrite 106 107 00000063 48C7C7[00000000] mov rdi, writedone 108 0000006A E83A000000 call printstring 109 110 111 112 113 114 115 0000006F 48C7C003000000 mov rax, SYS_close 116 00000076 488B3C25[00000000] mov rdi, qword[filedescript] 117 0000007E 0F05 syscall 118 119 00000080 EB1A jmp FATTO 120 121 erroronopen: 122 00000082 48C7C7[00000000] mov rdi, erroropenmsg 123 00000089 E81B000000 call printstring 124 125 0000008E EB0C jmp FATTO 126 127 erroronwrite: 128 00000090 48C7C7[00000000] mov rdi, errorwritemsg 129 00000097 E80D000000 call printstring 130 131 0000009C EBFE jmp FATTO 132 133 FATTO: 134 0000009E 48C7C03C000000 mov rax, SYS_exit 135 000000A5 48C7C700000000 mov rdi, EXIT_SUCCESS 136 000000AC 0F05 syscall 137 138 139 140 [global printstring] 141 printstring: 142 143 000000AE 55 push rbp 144 000000AF 4889E5 mov rbp, rsp 145 000000B2 53 push rbx 146 147 148 000000B3 4889FB mov rbx, rdi 149 000000B6 48C7C200000000 mov rdx, 0 150 stringcountloop: 151 000000BD 803B00 cmp byte[rbx], NULL 152 000000C0 7406 je stringcountdone 153 000000C2 48FFC2 inc rdx 154 000000C5 48FFC3 inc rbx 155 000000C8 EBF1 jmp stringcountloop 156 157 stringcountdone 158 000000CA 4883FA00 cmp rdx, 0 159 000000CE 7411 je printdone 160 161 162 163 000000D0 48C7C001000000 mov rax, SYS_write 164 000000D7 4889FE mov rsi, rdi 165 000000DA 48C7C701000000 mov rdi, STDOUT 166 000000E1 0F05 syscall 167 168 printdone: 169 000000E3 5B pop rbx 170 000000E4 5D pop rbp 171 000000E5 C3 ret 172 173 174 175 176 177