Compare commits
2 Commits
009f4d3bda
...
34ed7f9fcc
| Author | SHA1 | Date | |
|---|---|---|---|
| 34ed7f9fcc | |||
| 08ae2e64c9 |
@ -15,17 +15,35 @@ section .data
|
|||||||
E_open_file db `Something went wrong while opening file\n`
|
E_open_file db `Something went wrong while opening file\n`
|
||||||
|
|
||||||
section .text
|
section .text
|
||||||
|
read:
|
||||||
|
push rcx
|
||||||
|
push r11
|
||||||
|
mov rax, 0
|
||||||
|
syscall
|
||||||
|
pop r11
|
||||||
|
pop rcx
|
||||||
|
ret
|
||||||
|
|
||||||
|
write:
|
||||||
|
push rcx
|
||||||
|
push r11
|
||||||
|
mov rax, 1
|
||||||
|
syscall
|
||||||
|
pop r11
|
||||||
|
pop rcx
|
||||||
|
ret
|
||||||
|
|
||||||
namecmp:
|
namecmp:
|
||||||
.LFB6:
|
.LFB6:
|
||||||
push rbp
|
push rbp
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
mov QWORD -8[rbp], rdi
|
mov -8[rbp], rdi
|
||||||
mov QWORD -16[rbp], rsi
|
mov -16[rbp], rsi
|
||||||
jmp .L2
|
jmp .L2
|
||||||
.L6:
|
.L6:
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
movzx edx, BYTE [rax]
|
movzx edx, BYTE [rax]
|
||||||
mov rax, QWORD -16[rbp]
|
mov rax, -16[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
cmp dl, al
|
cmp dl, al
|
||||||
je .L3
|
je .L3
|
||||||
@ -35,11 +53,11 @@ namecmp:
|
|||||||
add QWORD -8[rbp], 1
|
add QWORD -8[rbp], 1
|
||||||
add QWORD -16[rbp], 1
|
add QWORD -16[rbp], 1
|
||||||
.L2:
|
.L2:
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
test al, al
|
test al, al
|
||||||
je .L5
|
je .L5
|
||||||
mov rax, QWORD -16[rbp]
|
mov rax, -16[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
test al, al
|
test al, al
|
||||||
jne .L6
|
jne .L6
|
||||||
@ -50,7 +68,6 @@ namecmp:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
openfile:
|
openfile:
|
||||||
.LFB7:
|
|
||||||
push rbp
|
push rbp
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
sub rsp, 32
|
sub rsp, 32
|
||||||
@ -58,20 +75,21 @@ openfile:
|
|||||||
mov rax, -24[rbp]
|
mov rax, -24[rbp]
|
||||||
mov esi, 0
|
mov esi, 0
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
mov eax, 0
|
mov eax, 2
|
||||||
call open@PLT
|
syscall
|
||||||
|
|
||||||
mov -4[rbp], eax
|
mov -4[rbp], eax
|
||||||
cmp -4[rbp], 0
|
cmp DWORD -4[rbp], 0
|
||||||
jns .L8
|
jns .L8
|
||||||
;lea rax, .LC0[rip]
|
mov rdi, 1
|
||||||
mov rax, E_open_file
|
mov rsi, E_open_file
|
||||||
mov rdi, rax
|
mov rdx, 40
|
||||||
call puts@PLT
|
call write
|
||||||
mov edi, 1
|
mov edi, 1
|
||||||
call exit@PLT
|
mov rax, 60
|
||||||
|
mov rdi, 1
|
||||||
|
syscall
|
||||||
.L8:
|
.L8:
|
||||||
mov eax, DWORD -4[rbp]
|
mov eax, -4[rbp]
|
||||||
leave
|
leave
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -79,28 +97,28 @@ fill_buffer:
|
|||||||
push rbp
|
push rbp
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
sub rsp, 32
|
sub rsp, 32
|
||||||
mov DWORD -20[rbp], edi
|
mov -20[rbp], edi
|
||||||
mov rdx, QWORD buffer_tail[rip]
|
mov rdx, [buffer_tail]
|
||||||
lea rax, buffer[rip]
|
lea rax, [buffer]
|
||||||
sub rdx, rax
|
sub rdx, rax
|
||||||
mov eax, 1024
|
mov eax, 1024
|
||||||
sub rax, rdx
|
sub rax, rdx
|
||||||
mov QWORD -8[rbp], rax
|
mov -8[rbp], rax
|
||||||
mov rdx, QWORD -8[rbp]
|
mov rdx, -8[rbp]
|
||||||
mov eax, DWORD -20[rbp]
|
mov eax, -20[rbp]
|
||||||
lea rcx, buffer[rip]
|
lea rcx, [buffer]
|
||||||
mov rsi, rcx
|
mov rsi, rcx
|
||||||
mov edi, eax
|
mov edi, eax
|
||||||
call read@PLT
|
call read
|
||||||
mov QWORD -16[rbp], rax
|
mov -16[rbp], rax
|
||||||
cmp QWORD -16[rbp], 1023
|
cmp QWORD -16[rbp], 1023
|
||||||
ja .L11
|
ja .L11
|
||||||
mov BYTE iseof[rip], 1
|
mov BYTE [iseof], 1
|
||||||
.L11:
|
.L11:
|
||||||
lea rdx, buffer[rip]
|
lea rdx, [buffer]
|
||||||
mov rax, QWORD -16[rbp]
|
mov rax, -16[rbp]
|
||||||
add rax, rdx
|
add rax, rdx
|
||||||
mov QWORD buffer_tail[rip], rax
|
mov [buffer_tail], rax
|
||||||
nop
|
nop
|
||||||
leave
|
leave
|
||||||
|
|
||||||
@ -109,135 +127,114 @@ fill_buffer:
|
|||||||
find_second_word:
|
find_second_word:
|
||||||
push rbp
|
push rbp
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
mov QWORD -8[rbp], rdi
|
mov -8[rbp], rdi
|
||||||
jmp .L13
|
jmp .L13
|
||||||
.L14:
|
.L14:
|
||||||
add QWORD -8[rbp], 1
|
add QWORD -8[rbp], 1
|
||||||
.L13:
|
.L13:
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
cmp al, 32
|
cmp al, 32
|
||||||
jne .L14
|
jne .L14
|
||||||
add QWORD -8[rbp], 1
|
add QWORD -8[rbp], 1
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
pop rbp
|
pop rbp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
find_fullname_end:
|
find_fullname_end:
|
||||||
push rbp
|
push rbp
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
lea rax, buffer[rip]
|
lea rax, [buffer]
|
||||||
mov QWORD -8[rbp], rax
|
mov -8[rbp], rax
|
||||||
jmp .L17
|
jmp .L17
|
||||||
.L20:
|
.L20:
|
||||||
add QWORD -8[rbp], 1
|
add QWORD -8[rbp], 1
|
||||||
.L17:
|
.L17:
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
cmp al, 10
|
cmp al, 10
|
||||||
jne .L18
|
jne .L18
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
test al, al
|
test al, al
|
||||||
jne .L19
|
jne .L19
|
||||||
.L18:
|
.L18:
|
||||||
lea rax, buffer[rip+1024]
|
lea rax, [buffer+1024]
|
||||||
cmp QWORD -8[rbp], rax
|
cmp -8[rbp], rax
|
||||||
jb .L20
|
jb .L20
|
||||||
.L19:
|
.L19:
|
||||||
lea rax, buffer[rip+1024]
|
lea rax, [buffer+1024]
|
||||||
cmp QWORD -8[rbp], rax
|
cmp -8[rbp], rax
|
||||||
jne .L21
|
jne .L21
|
||||||
mov eax, 0
|
mov eax, 0
|
||||||
jmp .L22
|
jmp .L22
|
||||||
.L21:
|
.L21:
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
.L22:
|
.L22:
|
||||||
pop rbp
|
pop rbp
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.LFE10:
|
|
||||||
.size find_fullname_end, .-find_fullname_end
|
|
||||||
.globl pop_fullname
|
|
||||||
.type pop_fullname, @function
|
|
||||||
pop_fullname:
|
pop_fullname:
|
||||||
.LFB11:
|
|
||||||
|
|
||||||
push rbp
|
push rbp
|
||||||
|
|
||||||
|
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
|
|
||||||
sub rsp, 32
|
sub rsp, 32
|
||||||
mov eax, 0
|
mov eax, 0
|
||||||
call find_fullname_end
|
call find_fullname_end
|
||||||
add rax, 1
|
add rax, 1
|
||||||
mov QWORD -16[rbp], rax
|
mov -16[rbp], rax
|
||||||
lea rdx, buffer[rip]
|
lea rdx, [buffer]
|
||||||
mov rax, QWORD -16[rbp]
|
mov rax, -16[rbp]
|
||||||
sub rax, rdx
|
sub rax, rdx
|
||||||
mov QWORD -24[rbp], rax
|
mov -24[rbp], rax
|
||||||
mov QWORD -8[rbp], 0
|
mov QWORD -8[rbp], 0
|
||||||
jmp .L24
|
jmp .L24
|
||||||
.L25:
|
.L25:
|
||||||
mov rdx, QWORD -16[rbp]
|
mov rdx, -16[rbp]
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
add rax, rdx
|
add rax, rdx
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
lea rcx, buffer[rip]
|
lea rcx, [buffer]
|
||||||
mov rdx, QWORD -8[rbp]
|
mov rdx, -8[rbp]
|
||||||
add rdx, rcx
|
add rdx, rcx
|
||||||
mov BYTE [rdx], al
|
mov BYTE [rdx], al
|
||||||
mov rdx, QWORD -16[rbp]
|
mov rdx, -16[rbp]
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
add rax, rdx
|
add rax, rdx
|
||||||
mov BYTE [rax], 0
|
mov BYTE [rax], 0
|
||||||
add QWORD -8[rbp], 1
|
add QWORD -8[rbp], 1
|
||||||
.L24:
|
.L24:
|
||||||
mov eax, 1024
|
mov eax, 1024
|
||||||
sub rax, QWORD -24[rbp]
|
sub rax, -24[rbp]
|
||||||
cmp QWORD -8[rbp], rax
|
cmp -8[rbp], rax
|
||||||
jb .L25
|
jb .L25
|
||||||
mov rax, QWORD buffer_tail[rip]
|
mov rax, [buffer_tail]
|
||||||
mov rdx, QWORD -24[rbp]
|
mov rdx, -24[rbp]
|
||||||
neg rdx
|
neg rdx
|
||||||
add rax, rdx
|
add rax, rdx
|
||||||
mov QWORD buffer_tail[rip], rax
|
mov [buffer_tail], rax
|
||||||
nop
|
nop
|
||||||
leave
|
leave
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.LFE11:
|
preprint db `count: `
|
||||||
.size pop_fullname, .-pop_fullname
|
postprint db `\n`
|
||||||
.section .rodata
|
|
||||||
.LC1:
|
|
||||||
.string "count: "
|
|
||||||
.LC2:
|
|
||||||
.string "\n"
|
|
||||||
.text
|
|
||||||
.globl print_count
|
|
||||||
.type print_count, @function
|
|
||||||
print_count:
|
print_count:
|
||||||
.LFB12:
|
|
||||||
|
|
||||||
push rbp
|
push rbp
|
||||||
|
|
||||||
|
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
|
|
||||||
sub rsp, 32
|
sub rsp, 32
|
||||||
mov QWORD -24[rbp], rdi
|
mov -24[rbp], rdi
|
||||||
mov edx, 8
|
mov edx, 8
|
||||||
lea rax, .LC1[rip]
|
mov rax, preprint
|
||||||
mov rsi, rax
|
mov rsi, rax
|
||||||
mov edi, 1
|
mov edi, 1
|
||||||
call write@PLT
|
call write
|
||||||
jmp .L27
|
jmp .L27
|
||||||
.L28:
|
.L28:
|
||||||
mov rcx, QWORD -24[rbp]
|
mov rcx, -24[rbp]
|
||||||
movabs rdx, -3689348814741910323
|
mov rdx, -3689348814741910323
|
||||||
mov rax, rcx
|
mov rax, rcx
|
||||||
mul rdx
|
mul rdx
|
||||||
shr rdx, 3
|
shr rdx, 3
|
||||||
@ -250,55 +247,46 @@ print_count:
|
|||||||
mov eax, edx
|
mov eax, edx
|
||||||
add eax, 48
|
add eax, 48
|
||||||
mov BYTE -1[rbp], al
|
mov BYTE -1[rbp], al
|
||||||
mov rax, QWORD -24[rbp]
|
mov rax, -24[rbp]
|
||||||
movabs rdx, -3689348814741910323
|
mov rdx, -3689348814741910323
|
||||||
mul rdx
|
mul rdx
|
||||||
mov rax, rdx
|
mov rax, rdx
|
||||||
shr rax, 3
|
shr rax, 3
|
||||||
mov QWORD -24[rbp], rax
|
mov -24[rbp], rax
|
||||||
lea rax, -1[rbp]
|
lea rax, -1[rbp]
|
||||||
mov edx, 1
|
mov edx, 1
|
||||||
mov rsi, rax
|
mov rsi, rax
|
||||||
mov edi, 1
|
mov edi, 1
|
||||||
call write@PLT
|
call write
|
||||||
.L27:
|
.L27:
|
||||||
cmp QWORD -24[rbp], 0
|
cmp QWORD -24[rbp], 0
|
||||||
jne .L28
|
jne .L28
|
||||||
mov edx, 1
|
mov edx, 1
|
||||||
lea rax, .LC2[rip]
|
mov rax, postprint
|
||||||
mov rsi, rax
|
mov rsi, rax
|
||||||
mov edi, 1
|
mov edi, 1
|
||||||
call write@PLT
|
call write
|
||||||
nop
|
nop
|
||||||
leave
|
leave
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.LFE12:
|
|
||||||
.size print_count, .-print_count
|
|
||||||
.globl get_name
|
|
||||||
.type get_name, @function
|
|
||||||
get_name:
|
get_name:
|
||||||
.LFB13:
|
|
||||||
|
|
||||||
push rbp
|
push rbp
|
||||||
|
|
||||||
|
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
|
|
||||||
sub rsp, 40
|
sub rsp, 40
|
||||||
mov QWORD -40[rbp], rdi
|
mov -40[rbp], rdi
|
||||||
lea rax, buffer[rip]
|
lea rax, [buffer]
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call find_second_word
|
call find_second_word
|
||||||
mov QWORD -24[rbp], rax
|
mov -24[rbp], rax
|
||||||
mov rax, QWORD -24[rbp]
|
mov rax, -24[rbp]
|
||||||
mov QWORD -8[rbp], rax
|
mov -8[rbp], rax
|
||||||
jmp .L30
|
jmp .L30
|
||||||
.L31:
|
.L31:
|
||||||
add QWORD -8[rbp], 1
|
add QWORD -8[rbp], 1
|
||||||
.L30:
|
.L30:
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
cmp al, 32
|
cmp al, 32
|
||||||
jne .L31
|
jne .L31
|
||||||
@ -310,49 +298,43 @@ get_name:
|
|||||||
mov QWORD -16[rbp], 0
|
mov QWORD -16[rbp], 0
|
||||||
jmp .L34
|
jmp .L34
|
||||||
.L35:
|
.L35:
|
||||||
mov rdx, QWORD -24[rbp]
|
mov rdx, -24[rbp]
|
||||||
mov rax, QWORD -16[rbp]
|
mov rax, -16[rbp]
|
||||||
add rax, rdx
|
add rax, rdx
|
||||||
mov rcx, QWORD -40[rbp]
|
mov rcx, -40[rbp]
|
||||||
mov rdx, QWORD -16[rbp]
|
mov rdx, -16[rbp]
|
||||||
add rdx, rcx
|
add rdx, rcx
|
||||||
movzx eax, BYTE [rax]
|
movzx eax, BYTE [rax]
|
||||||
mov BYTE [rdx], al
|
mov BYTE [rdx], al
|
||||||
add QWORD -16[rbp], 1
|
add QWORD -16[rbp], 1
|
||||||
.L34:
|
.L34:
|
||||||
mov rdx, QWORD -24[rbp]
|
mov rdx, -24[rbp]
|
||||||
mov rax, QWORD -16[rbp]
|
mov rax, -16[rbp]
|
||||||
add rax, rdx
|
add rax, rdx
|
||||||
cmp rax, QWORD -8[rbp]
|
cmp rax, -8[rbp]
|
||||||
jb .L35
|
jb .L35
|
||||||
mov eax, 0
|
mov eax, 0
|
||||||
.L33:
|
.L33:
|
||||||
leave
|
leave
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.LFE13:
|
_start:
|
||||||
.size get_name, .-get_name
|
|
||||||
.globl main
|
|
||||||
.type main, @function
|
|
||||||
main:
|
|
||||||
.LFB14:
|
|
||||||
push rbp
|
push rbp
|
||||||
mov rbp, rsp
|
mov rbp, rsp
|
||||||
sub rsp, 96
|
sub rsp, 96
|
||||||
mov DWORD -84[rbp], edi
|
mov -84[rbp], edi
|
||||||
mov QWORD -96[rbp], rsi
|
mov -96[rbp], rsi
|
||||||
mov rax, QWORD -96[rbp]
|
mov rax, -96[rbp]
|
||||||
add rax, 8
|
add rax, 8
|
||||||
mov rax, QWORD [rax]
|
mov rax, [rax]
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call openfile
|
call openfile
|
||||||
mov DWORD -12[rbp], eax
|
mov -12[rbp], eax
|
||||||
mov edx, 64
|
mov edx, 64
|
||||||
lea rax, name[rip]
|
lea rax, [name]
|
||||||
mov rsi, rax
|
mov rsi, rax
|
||||||
mov edi, 0
|
mov edi, 0
|
||||||
call read@PLT
|
call read
|
||||||
mov QWORD -8[rbp], 0
|
mov QWORD -8[rbp], 0
|
||||||
mov QWORD -80[rbp], 0
|
mov QWORD -80[rbp], 0
|
||||||
mov QWORD -72[rbp], 0
|
mov QWORD -72[rbp], 0
|
||||||
@ -375,7 +357,7 @@ main:
|
|||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call get_name
|
call get_name
|
||||||
lea rax, -80[rbp]
|
lea rax, -80[rbp]
|
||||||
lea rdx, name[rip]
|
lea rdx, [name]
|
||||||
mov rsi, rdx
|
mov rsi, rdx
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call namecmp
|
call namecmp
|
||||||
@ -385,11 +367,11 @@ main:
|
|||||||
.L38:
|
.L38:
|
||||||
mov eax, 0
|
mov eax, 0
|
||||||
call pop_fullname
|
call pop_fullname
|
||||||
mov rdx, QWORD buffer_tail[rip]
|
mov rdx, [buffer_tail]
|
||||||
lea rax, buffer[rip]
|
lea rax, [buffer]
|
||||||
cmp rdx, rax
|
cmp rdx, rax
|
||||||
jne .L39
|
jne .L39
|
||||||
mov rax, QWORD -8[rbp]
|
mov rax, -8[rbp]
|
||||||
mov rdi, rax
|
mov rdi, rax
|
||||||
call print_count
|
call print_count
|
||||||
mov eax, 0
|
mov eax, 0
|
||||||
|
|||||||
Reference in New Issue
Block a user