fixes
This commit is contained in:
parent
654c14d92b
commit
c9c3f239c8
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
Loading…
Reference in a new issue