This commit is contained in:
janis 2026-06-05 08:15:21 +02:00
parent 654c14d92b
commit c9c3f239c8
Signed by: janis
SSH key fingerprint: SHA256:bB1qbbqmDXZNT0KKD5c2Dfjg53JGhj7B3CFcLIzSqq8
3 changed files with 28 additions and 20 deletions

View file

@ -36,15 +36,15 @@ fsize:
mov rax, [rsi + 48] ; st_size mov rax, [rsi + 48] ; st_size
ret ret
;; rdi: dst ;; rdi: src
;; rsi: src ;; rsi: dst
;; rdx: len ;; rdx: len
memcpy: memcpy:
.memcpy_loop: .memcpy_loop:
test rdx, rdx test rdx, rdx
jz .memcpy_done jz .memcpy_done
mov al, byte [rsi] mov al, byte [rdi]
mov byte [rdi], al mov byte [rsi], al
inc rsi inc rsi
inc rdi inc rdi
dec rdx dec rdx
@ -62,6 +62,7 @@ memcpy:
;; +0x1010 argc: u32 ;; +0x1010 argc: u32
;; +0x1018 argv: *const *const u8 ;; +0x1018 argv: *const *const u8
global _start
_start: _start:
mov eax, dword [rsp] ; argc mov eax, dword [rsp] ; argc
lea rbx, [rsp + 8] ; argv lea rbx, [rsp + 8] ; argv
@ -98,7 +99,7 @@ _start:
;; copy program header to scratch space ;; copy program header to scratch space
mov rdi, 0x400040 mov rdi, 0x400040
mov rsi, [r15 + 0x40] lea rsi, [r15 + 0x40]
mov rdx, 0x38 mov rdx, 0x38
call memcpy call memcpy
@ -110,6 +111,7 @@ _start:
;; write e_entry to point at 0x40 + 0x38 + in_size - 5 ;; write e_entry to point at 0x40 + 0x38 + in_size - 5
sub rax, 5 sub rax, 5
add rax, 0x400000
mov dword [r15 + 24], eax ; write e_entry mov dword [r15 + 24], eax ; write e_entry
;; write Ehdr and Phdr to output file ;; write Ehdr and Phdr to output file

View file

@ -20,8 +20,8 @@
3e 00 3e 00
; e_version: u32 = EV_CURRENT ; e_version: u32 = EV_CURRENT
01 00 00 00 01 00 00 00
; e_entry: u64 = 0x400078 ; e_entry: u64 = 0x400078 + 0x5c
78 00 40 00 00 00 00 00 d4 00 40 00 00 00 00 00
; e_phoff: u64 = 0x40 ; e_phoff: u64 = 0x40
40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00
; e_shoff: u64 = 0x0 ; e_shoff: u64 = 0x0
@ -54,9 +54,9 @@
; p_paddr: u64 = 0x0 ; p_paddr: u64 = 0x0
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
; p_filesz: u64 = 0x167 ; p_filesz: u64 = 0x167
67 01 00 00 00 00 00 00 ef 01 00 00 00 00 00 00
; p_memsz: u64 = 0x167 ; p_memsz: u64 = 0x167
67 01 00 00 00 00 00 00 ef 01 00 00 00 00 00 00
; p_align: u64 = 0x1000 ; p_align: u64 = 0x1000
00 10 00 00 00 00 00 00 00 10 00 00 00 00 00 00
; End of program header ; End of program header
@ -118,16 +118,16 @@ e8 f1 ff ff ff
48 8b 46 30 48 8b 46 30
; ret ; ret
c3 c3
;
; @memcpy: ; @memcpy:
; test rdx, rdx ; test rdx, rdx
48 85 d2 48 85 d2
; jz 'memcpy_exit ; jz 'memcpy_exit
74 0f 74 0f
; mov al, byte [rsi] ; mov al, byte [rdi]
8a 06 8a 07
; mov byte [rdi], al ; mov byte [rsi], al
88 07 88 06
; inc rsi ; inc rsi
48 ff c6 48 ff c6
; inc rdi ; inc rdi
@ -199,8 +199,8 @@ e8 6b ff ff ff
; ;
; mov edi, 0x400040 ; mov edi, 0x400040
bf 40 00 40 00 bf 40 00 40 00
; mov rsi, [r15+0x40] ; lea rsi, [r15+0x40]
49 8b 77 40 49 8d 77 40
; mov edx, 0x38 (size) ; mov edx, 0x38 (size)
ba 38 00 00 00 ba 38 00 00 00
; call 'memcpy ; call 'memcpy
@ -217,6 +217,8 @@ b8 78 00 00 00
; ;
; sub rax, 5 ; sub rax, 5
48 83 e8 05 48 83 e8 05
; add rax, 0x400000
48 05 00 00 40 00
; mov dword [r15+0x18], eax (store file end - 5) ; mov dword [r15+0x18], eax (store file end - 5)
41 89 47 18 41 89 47 18
; ;
@ -244,7 +246,7 @@ b8 00 00 00 00
; test rax, rax ; test rax, rax
48 85 c0 48 85 c0
; jle 'die ; jle 'die
0f 8e c0 fe ff ff 0f 8e ba fe ff ff
; ;
; mov dword [r15+0x1000], eax (store bytes read) ; mov dword [r15+0x1000], eax (store bytes read)
41 89 87 00 10 00 00 41 89 87 00 10 00 00
@ -263,4 +265,5 @@ b8 01 00 00 00
; jz 'write_loop ; jz 'write_loop
74 b5 74 b5
; call 'die ; call 'die
e8 8f fe ff ff e8 89 fe ff ff
; end

View file

@ -200,7 +200,7 @@ e8 d8 ff ff ff
; jnz 'skip_line_read (+414) ; jnz 'skip_line_read (+414)
0f 85 f3 ff ff ff 0f 85 f3 ff ff ff
; call 'rd_buf (+419) ; call 'rd_buf (+419)
e8 cd ff ff ff e8 cb ff ff ff
; ret ; ret
c3 c3
; ;
@ -400,7 +400,7 @@ e9 cf ff ff ff
; lea rdi, [r15+0x6004] ; lea rdi, [r15+0x6004]
49 8d bf 04 60 00 00 49 8d bf 04 60 00 00
; call 'push_lbl (+770) ; call 'push_lbl (+770)
e8 3d fd ff ff e8 3b fd ff ff
; ret ; ret
c3 c3
; @not_label: (+771) ; @not_label: (+771)
@ -463,3 +463,6 @@ e8 57 fe ff ff
e8 80 ff ff ff e8 80 ff ff ff
; jmp 'main_loop (+910) ; jmp 'main_loop (+910)
e9 ec ff ff ff e9 ec ff ff ff
; jmp 'main
e9 a2 ff ff ff
; end