summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xshbin1688 -> 1728 bytes
-rw-r--r--sh.asm14
2 files changed, 9 insertions, 5 deletions
diff --git a/sh b/sh
index 55db507..1efff95 100755
--- a/sh
+++ b/sh
Binary files differ
diff --git a/sh.asm b/sh.asm
index ef147ac..9aafb7d 100644
--- a/sh.asm
+++ b/sh.asm
@@ -2,6 +2,7 @@ section .data
sigs dd 0x2
cpid dd 0x0
eol db `\n`
+ eol_mask db `\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`,`\n`
env_str db "/etc/environment", 0x0
prompt_str db "[0xdeadbeef] "
@@ -231,9 +232,9 @@ _parse1r:
jmp _parse1
_sabsf:
- test r8, r8
- je _parse1r
- mov r13, 0x2
+ cmp r8, 1
+ jg _parse1r
+ mov r13, 1
jmp _parse1r
_subz:
@@ -304,7 +305,7 @@ _parse6:
_parse7: ; absolute path
mov rax, sys_access
- mov rdi, rbx
+ mov rdi, r15
mov rsi, X_OK
syscall
@@ -318,12 +319,15 @@ _parse7: ; absolute path
;input: r12 (return address), r15 (buffer)
;output: r8 (length)
_strlen:
- mov r8, -17 ;We're always going to have to take 1 away because of the newline
+ mov r8, -16
xchg rsi, rcx ;bacup rcx, let rsi get clobbered
+ MovDqU xmm1, [eol_mask]
_strlen1:
add r8, 16
PcmpIstrI xmm0, [r15+r8],0
jnz _strlen1
+ PcmpIstrI xmm1, [r15+r8],0
+ jnz _strlen1
add r8, rcx
xchg rsi,rcx
jmp _parse1