Further fixes to hex2 command line parsing.
Do not hang if not arguments is specified or input file does not exist.
This commit is contained in:
parent
2b25915169
commit
35dbae15a0
|
@ -176,15 +176,20 @@ DEFINE xor_r9,r9 4D31C9
|
||||||
:loop_options_done
|
:loop_options_done
|
||||||
|
|
||||||
# Open file for reading
|
# Open file for reading
|
||||||
lea_rdx,[rip+DWORD] %fin # arg2 = &fin
|
|
||||||
pop_r8 # arg3 = in
|
pop_r8 # arg3 = in
|
||||||
|
push !1 # Set exit code in case of failure
|
||||||
|
cmp_r8, !0 # If NULL
|
||||||
|
je %failed_input # then exit
|
||||||
|
lea_rdx,[rip+DWORD] %fin # arg2 = &fin
|
||||||
push !1 # arg5 = EFI_FILE_READ_ONLY
|
push !1 # arg5 = EFI_FILE_READ_ONLY
|
||||||
push !1 # prepare to set arg4 to EFI_FILE_MODE_READ
|
push !1 # prepare to set arg4 to EFI_FILE_MODE_READ
|
||||||
pop_r9 # arg4 = EFI_FILE_MODE_READ
|
pop_r9 # arg4 = EFI_FILE_MODE_READ
|
||||||
mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
||||||
sub_rsp, !32 # allocate shadow stack space for UEFI function
|
sub_rsp, !32 # allocate shadow stack space for UEFI function
|
||||||
call_[rcx+BYTE] !8 # rootdir->open()
|
call_[rcx+BYTE] !8 # rootdir->open()
|
||||||
add_rsp, !40 # deallocate stack
|
cmp_rax, !0 # If failed to open
|
||||||
|
jne %failed_input # then exit
|
||||||
|
add_rsp, !48 # deallocate stack
|
||||||
|
|
||||||
# Open file for writing
|
# Open file for writing
|
||||||
pop_r8 # arg3 = out
|
pop_r8 # arg3 = out
|
||||||
|
@ -199,7 +204,7 @@ DEFINE xor_r9,r9 4D31C9
|
||||||
mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
||||||
sub_rsp, !32 # allocate shadow stack space for UEFI function
|
sub_rsp, !32 # allocate shadow stack space for UEFI function
|
||||||
call_[rcx+BYTE] !8 # rootdir->open()
|
call_[rcx+BYTE] !8 # rootdir->open()
|
||||||
add_rsp, !40 # deallocate stack
|
add_rsp, !48 # deallocate stack
|
||||||
|
|
||||||
# Allocate ourselves 16 MiB of memory
|
# Allocate ourselves 16 MiB of memory
|
||||||
mov_rdx, %0x1000000 # allocate 16 MiB of memory
|
mov_rdx, %0x1000000 # allocate 16 MiB of memory
|
||||||
|
@ -701,6 +706,7 @@ DEFINE xor_r9,r9 4D31C9
|
||||||
mov_rcx,[rip+DWORD] %fin # get fin
|
mov_rcx,[rip+DWORD] %fin # get fin
|
||||||
call %close_file # close fin
|
call %close_file # close fin
|
||||||
|
|
||||||
|
:failed_input
|
||||||
mov_rcx,[rip+DWORD] %rootdir # get rootdir
|
mov_rcx,[rip+DWORD] %rootdir # get rootdir
|
||||||
call %close_file # close rootdir
|
call %close_file # close rootdir
|
||||||
|
|
||||||
|
|
|
@ -67,15 +67,20 @@ loop_options:
|
||||||
loop_options_done:
|
loop_options_done:
|
||||||
|
|
||||||
# Open file for reading
|
# Open file for reading
|
||||||
lea rdx, [rip+fin] # arg2 = &fin
|
|
||||||
pop r8 # arg3 = in
|
pop r8 # arg3 = in
|
||||||
|
push 1 # Set exit code in case of failure
|
||||||
|
cmp r8, 0 # If NULL
|
||||||
|
je failed_input # then exit
|
||||||
|
lea rdx, [rip+fin] # arg2 = &fin
|
||||||
push 1 # arg5 = EFI_FILE_READ_ONLY
|
push 1 # arg5 = EFI_FILE_READ_ONLY
|
||||||
push 1 # prepare to set arg4 to EFI_FILE_MODE_READ
|
push 1 # prepare to set arg4 to EFI_FILE_MODE_READ
|
||||||
pop r9 # arg4 = EFI_FILE_MODE_READ
|
pop r9 # arg4 = EFI_FILE_MODE_READ
|
||||||
mov rcx, [rip+rootdir] # arg1 = rootdir
|
mov rcx, [rip+rootdir] # arg1 = rootdir
|
||||||
sub rsp, 32 # allocate shadow stack space for UEFI function
|
sub rsp, 32 # allocate shadow stack space for UEFI function
|
||||||
call [rcx+8] # rootdir->open()
|
call [rcx+8] # rootdir->open()
|
||||||
add rsp, 40 # deallocate stack
|
cmp rax, 0 # If failed to open
|
||||||
|
jne failed_input # then exit
|
||||||
|
add rsp, 48 # deallocate stack
|
||||||
|
|
||||||
# Open file for writing
|
# Open file for writing
|
||||||
pop r8 # arg3 = out
|
pop r8 # arg3 = out
|
||||||
|
@ -90,7 +95,7 @@ loop_options_done:
|
||||||
mov rcx, [rip+rootdir] # arg1 = rootdir
|
mov rcx, [rip+rootdir] # arg1 = rootdir
|
||||||
sub rsp, 32 # allocate shadow stack space for UEFI function
|
sub rsp, 32 # allocate shadow stack space for UEFI function
|
||||||
call [rcx+8] # rootdir->open()
|
call [rcx+8] # rootdir->open()
|
||||||
add rsp, 40 # deallocate stack
|
add rsp, 48 # deallocate stack
|
||||||
|
|
||||||
# Allocate ourselves 16 MiB of memory
|
# Allocate ourselves 16 MiB of memory
|
||||||
mov rdx, 0x1000000 # allocate 16 MiB of memory
|
mov rdx, 0x1000000 # allocate 16 MiB of memory
|
||||||
|
@ -592,6 +597,7 @@ failed_output:
|
||||||
mov rcx, [rip+fin] # get fin
|
mov rcx, [rip+fin] # get fin
|
||||||
call close_file # close fin
|
call close_file # close fin
|
||||||
|
|
||||||
|
failed_input:
|
||||||
mov rcx, [rip+rootdir] # get rootdir
|
mov rcx, [rip+rootdir] # get rootdir
|
||||||
call close_file # close rootdir
|
call close_file # close rootdir
|
||||||
|
|
||||||
|
|
|
@ -132,9 +132,9 @@ F0 00 # SizeOfOptionalHeader
|
||||||
# [0x148]
|
# [0x148]
|
||||||
# Start of section headers
|
# Start of section headers
|
||||||
00 00 00 00 00 00 00 00 ; Name of the section (empty) but could set to ".text"
|
00 00 00 00 00 00 00 00 ; Name of the section (empty) but could set to ".text"
|
||||||
C7 06 00 00 ; VirtualSize
|
DD 06 00 00 ; VirtualSize
|
||||||
00 10 00 00 ; VirtualAddress
|
00 10 00 00 ; VirtualAddress
|
||||||
C7 06 00 00 ; SizeOfRawData
|
DD 06 00 00 ; SizeOfRawData
|
||||||
70 01 00 00 ; PointerToRawData
|
70 01 00 00 ; PointerToRawData
|
||||||
00 00 00 00 ; PointerToRelocations
|
00 00 00 00 ; PointerToRelocations
|
||||||
00 00 00 00 ; PointerToLinenumbers
|
00 00 00 00 ; PointerToLinenumbers
|
||||||
|
@ -195,15 +195,20 @@ C7 06 00 00 ; SizeOfRawData
|
||||||
:b #:loop_options_done
|
:b #:loop_options_done
|
||||||
|
|
||||||
# Open file for reading
|
# Open file for reading
|
||||||
488D15 %0 ; lea_rdx,[rip+DWORD] %fin # arg2 = &fin
|
|
||||||
4158 ; pop_r8 # arg3 = in
|
4158 ; pop_r8 # arg3 = in
|
||||||
|
6A 01 ; push !1 # Set exit code in case of failure
|
||||||
|
4983F8 00 ; cmp_r8, !0 # If NULL
|
||||||
|
0F84 %8 ; je %failed_input # then exit
|
||||||
|
488D15 %0 ; lea_rdx,[rip+DWORD] %fin # arg2 = &fin
|
||||||
6A 01 ; push !1 # arg5 = EFI_FILE_READ_ONLY
|
6A 01 ; push !1 # arg5 = EFI_FILE_READ_ONLY
|
||||||
6A 01 ; push !1 # prepare to set arg4 to EFI_FILE_MODE_READ
|
6A 01 ; push !1 # prepare to set arg4 to EFI_FILE_MODE_READ
|
||||||
4159 ; pop_r9 # arg4 = EFI_FILE_MODE_READ
|
4159 ; pop_r9 # arg4 = EFI_FILE_MODE_READ
|
||||||
488B0D %3 ; mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
488B0D %3 ; mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
||||||
4883EC 20 ; sub_rsp, !32 # allocate shadow stack space for UEFI function
|
4883EC 20 ; sub_rsp, !32 # allocate shadow stack space for UEFI function
|
||||||
FF51 08 ; call_[rcx+BYTE] !8 # rootdir->open()
|
FF51 08 ; call_[rcx+BYTE] !8 # rootdir->open()
|
||||||
4883C4 28 ; add_rsp, !40 # deallocate stack
|
4883F8 00 ; cmp_rax, !0 # If failed to open
|
||||||
|
0F85 %8 ; jne %failed_input # then exit
|
||||||
|
4883C4 30 ; add_rsp, !48 # deallocate stack
|
||||||
|
|
||||||
# Open file for writing
|
# Open file for writing
|
||||||
4158 ; pop_r8 # arg3 = out
|
4158 ; pop_r8 # arg3 = out
|
||||||
|
@ -218,7 +223,7 @@ C7 06 00 00 ; SizeOfRawData
|
||||||
488B0D %3 ; mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
488B0D %3 ; mov_rcx,[rip+DWORD] %rootdir # arg1 = rootdir
|
||||||
4883EC 20 ; sub_rsp, !32 # allocate shadow stack space for UEFI function
|
4883EC 20 ; sub_rsp, !32 # allocate shadow stack space for UEFI function
|
||||||
FF51 08 ; call_[rcx+BYTE] !8 # rootdir->open()
|
FF51 08 ; call_[rcx+BYTE] !8 # rootdir->open()
|
||||||
4883C4 28 ; add_rsp, !40 # deallocate stack
|
4883C4 30 ; add_rsp, !48 # deallocate stack
|
||||||
|
|
||||||
# Allocate ourselves 16 MiB of memory
|
# Allocate ourselves 16 MiB of memory
|
||||||
48C7C2 00000001 ; mov_rdx, %0x1000000 # allocate 16 MiB of memory
|
48C7C2 00000001 ; mov_rdx, %0x1000000 # allocate 16 MiB of memory
|
||||||
|
@ -720,6 +725,7 @@ C7 06 00 00 ; SizeOfRawData
|
||||||
488B0D %0 ; mov_rcx,[rip+DWORD] %fin # get fin
|
488B0D %0 ; mov_rcx,[rip+DWORD] %fin # get fin
|
||||||
E8 %U ; call %close_file # close fin
|
E8 %U ; call %close_file # close fin
|
||||||
|
|
||||||
|
:8 # :failed_input
|
||||||
488B0D %3 ; mov_rcx,[rip+DWORD] %rootdir # get rootdir
|
488B0D %3 ; mov_rcx,[rip+DWORD] %rootdir # get rootdir
|
||||||
E8 %U ; call %close_file # close rootdir
|
E8 %U ; call %close_file # close rootdir
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue