From 56d82c386f15dc26f846faea67d5a675c4cbfb37 Mon Sep 17 00:00:00 2001 From: Namonay Date: Mon, 18 Mar 2024 13:40:09 +0100 Subject: [PATCH] Fixed more segfaults, final commit ? --- .gitignore | 3 ++- ft_read.s | 8 ++++---- ft_strcmp.s | 22 ++++++++++++++++------ ft_strcpy.s | 12 ++++++------ ft_strdup.s | 14 ++++++-------- ft_write.s | 8 ++++---- libasm.a | Bin 5042 -> 0 bytes test.c | 9 ++++++--- 8 files changed, 44 insertions(+), 32 deletions(-) delete mode 100644 libasm.a diff --git a/.gitignore b/.gitignore index 8e736c4..c570914 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.o *.out -*.a \ No newline at end of file +*.a +*.c \ No newline at end of file diff --git a/ft_read.s b/ft_read.s index 7522ee8..4be3f8a 100644 --- a/ft_read.s +++ b/ft_read.s @@ -2,16 +2,16 @@ global ft_read extern __errno_location ft_read: - mov eax, 0x11 + mov eax, 0 syscall test rax, rax js .error ret .error: - mov ebx, eax + mov rdx, rax call __errno_location wrt ..plt - neg ebx - mov dword [rax], ebx + neg rdx + mov [rax], rdx mov rax, -1 ret \ No newline at end of file diff --git a/ft_strcmp.s b/ft_strcmp.s index 93bc1b7..1c367d0 100644 --- a/ft_strcmp.s +++ b/ft_strcmp.s @@ -1,17 +1,27 @@ global ft_strcmp -extern _malloc ft_strcmp: + xor r8, r8 xor rax, rax - xor rbx, rbx .count: - mov rax, [rdi + rbx] - sub rax, [rsi + rbx] - cmp rax, 0 + mov al, BYTE [rdi + r8] + mov dl, BYTE [rsi + r8] + test al, al + jz .end + test dl, dl + jz .end + cmp al, dl jne .end - inc rbx + inc r8 jmp .count .end: + sub al, dl + js .neg + ret + +.neg: + neg al + neg rax ret \ No newline at end of file diff --git a/ft_strcpy.s b/ft_strcpy.s index d2ea71d..72803c9 100644 --- a/ft_strcpy.s +++ b/ft_strcpy.s @@ -1,17 +1,17 @@ global ft_strcpy ft_strcpy: - xor rbx, rbx + xor rdx, rdx .cpy: - cmp byte [rsi + rbx], 0 + cmp byte [rsi + rdx], 0 je .end - mov rax, [rsi + rbx] - mov [rdi + rbx], rax - inc rbx + mov rax, [rsi + rdx] + mov [rdi + rdx], rax + inc rdx jmp .cpy .end: - mov byte [rdi + rbx], 0 + mov byte [rdi + rdx], 0 mov rax, rdi ret diff --git a/ft_strdup.s b/ft_strdup.s index e790de2..9f48a77 100644 --- a/ft_strdup.s +++ b/ft_strdup.s @@ -3,23 +3,21 @@ global ft_strdup extern ft_strlen extern ft_strcpy extern malloc -extern __errno_location ft_strdup: - cmp rdi, 0 - je .end - mov r12, rdi call ft_strlen inc rax - mov rdi, rax + push rdi + mov rdi, rax ; move the result of strlen in rdi call malloc wrt ..plt test rax, rax je .end - mov rdi, rax - mov rsi, r12 + pop r8 + mov rdi, rax ; move the result of malloc into rdi (override strlen result) + mov rsi, r8 ; move the argument of strdup in rsi call ft_strcpy ret .end: - xor rax, rax + pop r8 ret \ No newline at end of file diff --git a/ft_write.s b/ft_write.s index f0cb24a..02992bb 100644 --- a/ft_write.s +++ b/ft_write.s @@ -2,16 +2,16 @@ global ft_write extern __errno_location ft_write: - mov eax, 0x1 + mov eax, 0x1 ; put the syscall number of write syscall test rax, rax js .error ret .error: - mov ebx, eax + mov rdx, rax call __errno_location wrt ..plt - neg ebx - mov dword [rax], ebx + neg rdx + mov [rax], rdx mov rax, -1 ret \ No newline at end of file diff --git a/libasm.a b/libasm.a deleted file mode 100644 index 5ed300b5dfa670074afe3061d25f9b745b1f97b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5042 zcmeHL&rcIk5T1pCiXeDUFj3eh_#CU!9{sfK?5J^=>HvUtd|m*w&Y=1V;KT=j&bI(P?K56(!E@(|^MKk@_lZ{| z#VzKisl``?%CgZ)71pK~E5Is_%#_vQ;#M?z`?gxj=!jX;RL8SB5AL>D7A{JQ1rreV zj1^!qR9T;dHfV`h_oq@UdT3jsvcik#jv7(#5&dJ>ZxuG`uJib`c*o|zdK$Gx-@<3d zb@ohQ+lJ3^?)Pzf4%^;%nsOuK7U%MsKr}W^D9m2CaY;>N0bxEWo!F6QNbfHwJ4F!^fO`RQxuWaNmveLF zLf(5)-ua`ie*H7(P8=MHYnQQ^+8IV5f+I?`xA5O;|D zN02*%>ih2I&PlWzJS!LeIIrw-chG3S-IzKiO`>);anzhTz;C#tQ>>&p)Y$MJxpxjD zhw9f~J@}OS9+yMC~1+n?X12EeKQz?7=#y&>k0>r&jk+#7K@)kPJ+g0mt}lbj0k|BT70BDDZo zclM&`l!}1VA#9f_39&tv)pdexA1tRj3~bAsBq_Fi22om^fy7oEw!g5W&*KT(#3Py0 z#MK9{8QYI|ylG^7tPc?02WeDHK6IkbhiH z$XxicT9^eorwUdH`W!9L??d}N_P-IDl-7(Z2=;(0LA6X2D3llHJuW_|PizSZf;<`8 zWf_hzO1om&osdh}tf^oQ#-+okPcmYUlXA&$VZZf>&0O#~zPY25a>>*elVbgnOKE&h zb4#(QAVG0-qiSFpE8{z>b?^r7SATv|-gV!pZfJGQ_d2ojp!!kuYslIp_s(CcS9Gpv zfv(;8OJSoq6ZVZp_mn(qdPn=!$bLoH