Function at 0x140002890
Capabilities:
Accept command line arguments
Create pipe
Create process on windows
Create thread

Disassembly:
push r12
mov eax, 0x10120
push rbp
push rdi
push rsi
push rbx
call fcn.1400026f0
sub rsp, rax
mov rdi, rdx
mov esi, ecx
call dbg.__main
call qword [sym.imp.KERNEL32.dll_GetCommandLineW]
xor edx, edx
mov rbx, rax
movzx eax, word [rax]
test ax, ax
je 0x1400028f1
test edx, edx
jne 0x1400028d8
cmp ax, 0x20
je 0x14000299c
cmp ax, 9
je 0x14000299c
mov ecx, edx
xor ecx, 1
cmp ax, 0x22
cmove edx, ecx
movzx eax, word [rbx + 2]
add rbx, 2
test ax, ax
jne 0x1400028c0
lea rbp, [rsp + 0x120]
lea rdx, str.openscad.exe
mov rcx, rbp
call sym.wcscpy
mov rcx, rbp
call sym.wcslen
mov rcx, rbx
mov r12, rax
call sym.wcslen
add r12, rax
cmp r12, 0x7fff
ja 0x140002bd7
mov rdx, rbx
mov rcx, rbp
call sym.wcscat
cmp esi, 2
jle 0x1400029b1
lea edx, [rsi - 3]
lea rax, [rdi + 8]
mov r9d, 0x2d
mov r10d, 0x6f
lea rcx, [rdi + rdx*8 + 0x10]
jmp 0x140002961
add rax, 8
cmp rcx, rax
je 0x1400029b1
mov rdx, qword [rax + 8]
cmp byte [rdx], 0x2d
jne 0x140002958
cmp byte [rdx + 1], 0
jne 0x140002958
mov rdx, qword [rax]
movzx r8d, byte [rdx]
cmp r9d, r8d
jne 0x140002958
movzx r8d, byte [rdx + 1]
cmp r10d, r8d
jne 0x140002958
cmp byte [rdx + 2], 0
jne 0x140002958
mov r12d, 1
jmp 0x1400029b4
add rbx, 2
movzx eax, word [rbx + 2]
cmp ax, 0x20
je 0x140002998
cmp ax, 9
je 0x140002998
jmp 0x1400028f1
xor r12d, r12d
lea rsi, [rsp + 0x80]
xor eax, eax
mov ecx, 0x26
mov rbx, qword [sym.imp.KERNEL32.dll_GetStdHandle]
mov rdi, rsi
rep stosd dword [rdi], eax
mov ecx, 0xfffffff6
mov dword [rsp + 0x98], 0x68
mov dword [rsp + 0xd4], 0x100
call rbx
mov ecx, 0xfffffff5
mov qword [rsp + 0xe8], rax
call rbx
mov ecx, 0xfffffff4
mov qword [rsp + 0xf0], rax
call rbx
xor r10d, r10d
xor r11d, r11d
mov dword [rsp + 0x60], 0x18
mov qword [rsp + 0x68], r10
lea rdx, [rsp + 0x58]
mov r9d, 0x400
lea rcx, [rsp + 0x88]
mov qword [rsp + 0x90], rax
lea r8, [rsp + 0x60]
mov dword [rsp + 0x70], r11d
call qword [sym.imp.KERNEL32.dll_CreatePipe]
test eax, eax
je 0x140002bb0
call qword [sym.imp.KERNEL32.dll_GetCurrentProcess]
xor r9d, r9d
mov rdx, qword [rsp + 0x58]
mov dword [rsp + 0x30], 2
mov dword [rsp + 0x20], r9d
mov rbx, rax
mov r8, rax
mov rcx, rax
mov dword [rsp + 0x28], 1
mov rdi, qword [sym.imp.KERNEL32.dll_DuplicateHandle]
lea r9, [rsp + 0xf8]
call rdi
test eax, eax
je 0x140002c27
mov rcx, qword [rsp + 0x58]
test r12d, r12d
jne 0x140002ae7
mov rax, qword [rsp + 0xf0]
xor r8d, r8d
mov rdx, rcx
mov dword [rsp + 0x30], 2
mov dword [rsp + 0x20], r8d
lea r9, [rsp + 0xf0]
mov r8, rbx
mov rcx, rbx
mov qword [rsp + 0x90], rax
mov dword [rsp + 0x28], 1
call rdi
test eax, eax
je 0x140002c27
mov rcx, qword [rsp + 0x58]
call qword [sym.imp.KERNEL32.dll_CloseHandle]
xor ecx, ecx
xor r9d, r9d
xor r8d, r8d
lea rax, [rsp + 0x100]
mov qword [rsp + 0x38], rcx
mov rdx, rbp
mov qword [rsp + 0x48], rax
lea rax, [rsp + 0x98]
mov qword [rsp + 0x30], rcx
xor ecx, ecx
mov qword [rsp + 0x40], rax
mov dword [rsp + 0x28], 0x400
mov dword [rsp + 0x20], 1
call qword [sym.imp.KERNEL32.dll_CreateProcessW]
test eax, eax
je 0x140002c3d
xor eax, eax
xor edx, edx
mov r9, rsi
xor ecx, ecx
mov dword [rsp + 0x20], edx
lea r8, [sym.watchdog]
mov edx, 0x8000
xor ebx, ebx
mov qword [rsp + 0x28], rax
call qword [sym.imp.KERNEL32.dll_CreateThread]
test rax, rax
je 0x140002c56
or edx, 0xffffffff
mov rcx, qword [rsp + 0x100]
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
test eax, eax
jne 0x140002be7
mov rcx, qword [rsp + 0x100]
lea rdx, [rsp + 0x54]
call qword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
test eax, eax
je 0x140002c74
test ebx, ebx
jne 0x140002bc4
mov eax, dword [rsp + 0x80]
test eax, eax
jne 0x140002bc9
mov eax, dword [rsp + 0x54]
jmp 0x140002bc9
call qword [sym.imp.KERNEL32.dll_GetLastError]
lea rcx, str.CreatePipe__:
mov edx, eax
call sym.displayError
mov eax, 1
add rsp, 0x10120
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
ret
xor edx, edx
lea rcx, str.Command_line_length_exceeds_limit_n
call sym.displayError
jmp 0x140002bc4
mov rbx, qword [sym.imp.KERNEL32.dll_GetLastError]
call rbx
lea rcx, str.WaitForSingleObject__:
mov edx, eax
call sym.displayError
mov rcx, qword [rsp + 0x100]
lea rdx, [rsp + 0x54]
call qword [sym.imp.KERNEL32.dll_GetExitCodeProcess]
test eax, eax
jne 0x140002bc4
call rbx
lea rcx, str.GetExitCodeProcess__:
mov edx, eax
call sym.displayError
jmp 0x140002bc4
call qword [sym.imp.KERNEL32.dll_GetLastError]
lea rcx, str.DuplicateHandle__:
mov edx, eax
call sym.displayError
jmp 0x140002bc4
call qword [sym.imp.KERNEL32.dll_GetLastError]
lea rcx, str.Cannot_run_openscad.exe_n
mov edx, eax
call sym.displayError
jmp 0x140002bc4
call qword [sym.imp.KERNEL32.dll_GetLastError]
lea rcx, str.CreateThread__:
mov ebx, 1
mov edx, eax
call sym.displayError
jmp 0x140002b6b
mov rbx, qword [sym.imp.KERNEL32.dll_GetLastError]
jmp 0x140002c15