diff --git a/funnyhello.s b/funnyhello.s new file mode 100644 index 0000000..f6751d9 --- /dev/null +++ b/funnyhello.s @@ -0,0 +1,78 @@ +.text +.globl _start + +_start: + ld a0, 8(sp) + jal ra, puts + la a0, helloworld + jal ra, puts + la a0, incomingflag + jal ra, puts + + + ld t2, flagmyballs + ror t2, t2, 01 + la t1, flagmyballs + sd t2, 0(t1) + + la a0, flagmyballs + jal ra, puts + j exit + +len: + mv t0, a0 + mv t1, t0 + +lenloop: + lb t2, (t1) + beq t2, x0, lencleanup + addi t1, t1, 1 + j lenloop + +lencleanup: + sub a0, t1, t0 + ret + +puts: + #here a0 should be the pointer to the string + + #save s2 becuase we are gonna use it + addi sp, sp, -16 + sd s2, 12(sp) + + #save a0 because we need it later + mv s2, a0 + + #get length because the stdout systemcall needs it in a2 + addi sp, sp, -16 # Allocate stack space + sd ra, 12(sp) # Save return address + jal ra, len + ld ra, 12(sp) # Restore return address + addi sp, sp, 16 # Deallocate stack space + #a0 should be the length + mv a2, a0 #stdout expects it in a2 + + li a0, 1 # file descriptor = 1 (stdout) + li a7, 64 # syscall write (64) + + mv a1, s2 #this should still be the pointer to the text + + #restore s2 for the next guy + ld s2, 12(sp) + addi sp, sp, 16 + + ecall + + ret + +exit: + li a0, 0 # exit code + li a7, 93 # syscall exit + ecall + +.data +helloworld: .asciz "Hello! It works!!!\n" +incomingflag: .asciz "The flag you gotta fix should be right after the newline\n" +flagmyballs: +# .dword 0x7370617263363400 + .dword 0x0343663726170730 diff --git a/hello.s b/hello.s new file mode 100644 index 0000000..0c7b1de --- /dev/null +++ b/hello.s @@ -0,0 +1,17 @@ +.globl _start + + _start: + li a0, 1 # file descriptor = 1 (stdout) + la a1, string # buffer + li a2, 19 # size + li a7, 64 # syscall write (64) + ecall + + _end: + + li a0, 0 # exit code + li a7, 93 # syscall exit + ecall + + + string: .asciz "Hello! It works!!!\n"