Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,42 @@
option casemap:none
option literals:on
printf proto :dword, :VARARG
exit proto :dword
.data
s db "Goodbye, World!",0
.data?
d db 20 dup (?)
dp dq ?
tb dd ?
.code
main proc
lea rsi, s ;; Put the address of var S into the source index(RSI)
xor rcx, rcx ;; Zero out RCX
_getsize:
inc rcx ;; Advanced the index by 1
cmp byte ptr [rsi+rcx],0 ;; check the current byte for terminating 0
jne _getsize ;; nope, jump back and check again
mov tb, ecx ;; tb = Total bytes, Keep a copy of the size of the string
lea rsi, s ;; Copy the address of s into the source index(rsi)
lea rdi, d ;; Copy the address of d into the destination index(rdi)
rep movsb ;; Copy bytes from ESI to EDI until RCX is 0
lea rax, s ;; Get the address of S
mov dp, rax ;; Copy it from RAX to dp
mov rbx,rdi ;; Make a copy of RDI, cause over writes due to ABI call args T_T
invoke printf, CSTR("-> s (0x%x) = %s",10), rsi, addr s
invoke printf, CSTR("-> d (0x%x) = %s",10), rbx, addr d
invoke printf, CSTR("-> dp (0x%x) = %s",10), addr dp, dp
invoke printf, CSTR("-> bytes copied: %i",10), tb
xor rsi, rsi
call exit
ret
main endp
end

View file

@ -0,0 +1,114 @@
%macro sysdef 2
%define sys_%1 %2
%endmacro
sysdef write, 1
%macro prolog 1
push rbp
mov rbp, rsp
sub rsp, %1
%endmacro
%macro epilog 1
add rsp, %1
pop rbp
%endmacro
%macro xlea 2
lea %1, [rel %2]
%endmacro
%macro inv 1-7 0,0,0,0,0,0
mov r9,%7
mov r8,%6
mov r10,%5
mov rdx,%4
mov rsi,%3
mov rdi,%2
mov rax,sys_%1
syscall
%endmacro
section .rodata
sz1 db "Goodbye, World!",0xa,0
section .bss
sz2 resq 1
section .text
strlcpy:
prolog 0x38
%define dest rbp-0x18
%define src rbp-0x10
%define n rbp-0x8
mov qword [rbp-0x28], rdi
mov qword [rbp-0x30], rsi
mov qword [rbp-0x38], rdx
mov rax, qword [rbp-0x28]
mov qword [dest], rax
mov rax, qword [rbp-0x30]
mov qword [src], rax
mov rax, qword [rbp-0x38]
mov qword [n], rax
cmp qword [n], 0
je _stlc_done
_stlc_doloop:
dec qword [n]
cmp qword [n], 0
je _stlc_done
mov rbx, qword [src]
lea rax, [rbx+1]
mov qword [src], rax
mov rax, qword [dest]
lea rcx, [rax+1]
mov qword [dest], rcx
movzx ebx, byte [rbx]
mov byte [rax], bl
movzx eax, byte [rax]
test al, al
je _stlc_done
jmp _stlc_doloop
_stlc_done:
epilog 0x38
ret
strlen:
prolog 0x10
%define s rbp-0x8
mov qword [rbp-0x10], rdi
mov rax, qword [rbp-0x10]
mov qword [s], rax
mov rsi, qword [s]
xor rcx, rcx
_stl_count:
cmp byte [rsi+rcx], 0
je _stl_exit
inc rcx
jne _stl_count
_stl_exit:
mov rax, rcx
epilog 0x10
ret
global main
main:
prolog 0x20
%define tmp rbp-0x20
xlea rbx, sz1
mov qword [tmp], rbx
mov rdi, qword [tmp]
call strlen
mov rcx, rax
push rcx
mov rdx, rcx
xlea rsi, sz1
xlea rdi, sz2
call strlcpy
xlea rbx, sz2
pop rcx
inv write, 1, rbx, rcx
inv exit, 0
epilog 0x20
ret