; ; _write_nolock from 0x18014034c to 0x18014062f (739 bytes) ; ; 2 xrefs: ; > _write @ 0x180140306 ; > @ 0x180203c14 ; ; This function is hookable on this platform! ; ; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA ; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings ; mov [rsp-38h+arg_18], rbx ; +0x0, 0x18014034c push rbp ; +0x5, 0x180140351 push rsi ; +0x6, 0x180140352 push rdi ; +0x7, 0x180140353 push r12 ; +0x8, 0x180140354 push r13 ; +0xa, 0x180140356 push r14 ; +0xc, 0x180140358 push r15 ; +0xe, 0x18014035a mov rbp, rsp ; +0x10, 0x18014035c sub rsp, 60h ; +0x13, 0x18014035f xor ebx, ebx ; +0x17, 0x180140363 mov r14d, r8d ; +0x19, 0x180140365 movsxd r12, ecx ; +0x1c, 0x180140368 mov rdi, rdx ; +0x1f, 0x18014036b test r8d, r8d ; +0x22, 0x18014036e jz loc_180140615 ; +0x25, 0x180140371 test rdx, rdx ; +0x2b, 0x180140377 jnz short loc_18014039B ; +0x2e, 0x18014037a call __doserrno ; +0x30, 0x18014037c mov [rax], ebx ; +0x35, 0x180140381 call _errno ; +0x37, 0x180140383 mov dword ptr [rax], 16h ; +0x3c, 0x180140388 call _invalid_parameter_noinfo ; +0x42, 0x18014038e or eax, 0FFFFFFFFh ; +0x47, 0x180140393 jmp loc_180140617 ; +0x4a, 0x180140396 mov rax, r12 ; +0x4f, 0x18014039b lea rcx, qword_1801F5160 ; +0x52, 0x18014039e and eax, 3Fh ; +0x59, 0x1801403a5 mov r13, r12 ; +0x5c, 0x1801403a8 sar r13, 6 ; +0x5f, 0x1801403ab lea r15, [rax+rax*8] ; +0x63, 0x1801403af mov rcx, [rcx+r13*8] ; +0x67, 0x1801403b3 movsx esi, byte ptr [rcx+r15*8+39h] ; +0x6b, 0x1801403b7 lea eax, [rsi-1] ; +0x71, 0x1801403bd cmp al, 1 ; +0x74, 0x1801403c0 ja short loc_1801403CD ; +0x76, 0x1801403c2 mov eax, r14d ; +0x78, 0x1801403c4 not eax ; +0x7b, 0x1801403c7 test al, 1 ; +0x7d, 0x1801403c9 jz short loc_18014037C ; +0x7f, 0x1801403cb test byte ptr [rcx+r15*8+38h], 20h ; +0x81, 0x1801403cd jz short loc_1801403E3 ; +0x87, 0x1801403d3 xor edx, edx ; +0x89, 0x1801403d5 mov ecx, r12d ; +0x8b, 0x1801403d7 lea r8d, [rdx+2] ; +0x8e, 0x1801403da call j_??$common_lseek_nolock@_J@@YA_JH_JH@Z ; +0x92, 0x1801403de mov ecx, r12d; FileHandle ; +0x97, 0x1801403e3 mov [rbp+var_20], rbx ; +0x9a, 0x1801403e6 call _isatty ; +0x9e, 0x1801403ea test eax, eax ; +0xa3, 0x1801403ef jz loc_180140502 ; +0xa5, 0x1801403f1 lea rax, qword_1801F5160 ; +0xab, 0x1801403f7 mov rax, [rax+r13*8] ; +0xb2, 0x1801403fe cmp [rax+r15*8+38h], bl ; +0xb6, 0x180140402 jge loc_180140502 ; +0xbb, 0x180140407 call __acrt_getptd ; +0xc1, 0x18014040d mov rcx, [rax+90h] ; +0xc6, 0x180140412 cmp [rcx+138h], rbx ; +0xcd, 0x180140419 jnz short loc_180140438 ; +0xd4, 0x180140420 lea rax, qword_1801F5160 ; +0xd6, 0x180140422 mov rax, [rax+r13*8] ; +0xdd, 0x180140429 cmp [rax+r15*8+39h], bl ; +0xe1, 0x18014042d jz loc_180140502 ; +0xe6, 0x180140432 lea rax, qword_1801F5160 ; +0xec, 0x180140438 mov rcx, [rax+r13*8] ; +0xf3, 0x18014043f lea rdx, [rbp+Mode]; lpMode ; +0xf7, 0x180140443 mov rcx, [rcx+r15*8+28h]; hConsoleHandle ; +0xfb, 0x180140447 call cs:GetConsoleMode ; +0x100, 0x18014044c test eax, eax ; +0x106, 0x180140452 jz loc_180140502 ; +0x108, 0x180140454 test sil, sil ; +0x10e, 0x18014045a jz loc_1801404E4 ; +0x111, 0x18014045d dec sil ; +0x117, 0x180140463 cmp sil, 1 ; +0x11a, 0x180140466 ja loc_18014059E ; +0x11e, 0x18014046a lea r12, [rdi+r14] ; +0x124, 0x180140470 mov qword ptr [rbp+NumberOfBytesWritten], rbx ; +0x128, 0x180140474 mov r14, rdi ; +0x12c, 0x180140478 cmp rdi, r12 ; +0x12f, 0x18014047b jnb loc_180140594 ; +0x132, 0x18014047e mov esi, [rbp+NumberOfBytesWritten+4] ; +0x138, 0x180140484 movzx eax, word ptr [r14] ; +0x13b, 0x180140487 movzx ecx, ax; Character ; +0x13f, 0x18014048b mov word ptr [rbp+Mode], ax ; +0x142, 0x18014048e call _putwch_nolock ; +0x146, 0x180140492 movzx ecx, word ptr [rbp+Mode] ; +0x14b, 0x180140497 cmp ax, cx ; +0x14f, 0x18014049b jnz short loc_1801404D6 ; +0x152, 0x18014049e add esi, 2 ; +0x154, 0x1801404a0 mov [rbp+NumberOfBytesWritten+4], esi ; +0x157, 0x1801404a3 cmp cx, 0Ah ; +0x15a, 0x1801404a6 jnz short loc_1801404C7 ; +0x15e, 0x1801404aa mov ecx, 0Dh; Character ; +0x160, 0x1801404ac call _putwch_nolock ; +0x165, 0x1801404b1 mov ecx, 0Dh ; +0x16a, 0x1801404b6 cmp ax, cx ; +0x16f, 0x1801404bb jnz short loc_1801404D6 ; +0x172, 0x1801404be inc esi ; +0x174, 0x1801404c0 mov [rbp+NumberOfBytesWritten+4], esi ; +0x176, 0x1801404c2 inc ebx ; +0x179, 0x1801404c5 add r14, 2 ; +0x17b, 0x1801404c7 cmp r14, r12 ; +0x17f, 0x1801404cb jnb loc_180140594 ; +0x182, 0x1801404ce jmp short loc_180140487 ; +0x188, 0x1801404d4 call cs:GetLastError ; +0x18a, 0x1801404d6 mov [rbp+NumberOfBytesWritten], eax ; +0x190, 0x1801404dc jmp loc_180140594 ; +0x193, 0x1801404df mov r9d, r14d ; +0x198, 0x1801404e4 lea rcx, [rbp+NumberOfBytesWritten] ; +0x19b, 0x1801404e7 mov r8, rdi ; +0x19f, 0x1801404eb mov edx, r12d ; +0x1a2, 0x1801404ee call ?write_double_translated_ansi_nolock@@YA?AUwrite_result@?A0x17268360@@HQEBDI@Z ; +0x1a5, 0x1801404f1 movsd xmm0, qword ptr [rax] ; +0x1aa, 0x1801404f6 mov ebx, [rax+8] ; +0x1ae, 0x1801404fa jmp loc_180140599 ; +0x1b1, 0x1801404fd lea rax, qword_1801F5160 ; +0x1b6, 0x180140502 mov rcx, [rax+r13*8] ; +0x1bd, 0x180140509 cmp [rcx+r15*8+38h], bl ; +0x1c1, 0x18014050d jge short loc_180140561 ; +0x1c6, 0x180140512 mov ecx, esi ; +0x1c8, 0x180140514 test sil, sil ; +0x1ca, 0x180140516 jz short loc_18014054D ; +0x1cd, 0x180140519 sub ecx, 1 ; +0x1cf, 0x18014051b jz short loc_180140539 ; +0x1d2, 0x18014051e cmp ecx, 1 ; +0x1d4, 0x180140520 jnz short loc_18014059E ; +0x1d7, 0x180140523 mov r9d, r14d ; +0x1d9, 0x180140525 lea rcx, [rbp+NumberOfBytesWritten] ; +0x1dc, 0x180140528 mov r8, rdi ; +0x1e0, 0x18014052c mov edx, r12d ; +0x1e3, 0x18014052f call ?write_text_utf16le_nolock@@YA?AUwrite_result@?A0x17268360@@HQEBDI@Z ; +0x1e6, 0x180140532 jmp short loc_1801404F6 ; +0x1eb, 0x180140537 mov r9d, r14d ; +0x1ed, 0x180140539 lea rcx, [rbp+NumberOfBytesWritten] ; +0x1f0, 0x18014053c mov r8, rdi ; +0x1f4, 0x180140540 mov edx, r12d ; +0x1f7, 0x180140543 call ?write_text_utf8_nolock@@YA?AUwrite_result@?A0x17268360@@HQEBDI@Z ; +0x1fa, 0x180140546 jmp short loc_1801404F6 ; +0x1ff, 0x18014054b mov r9d, r14d ; +0x201, 0x18014054d lea rcx, [rbp+NumberOfBytesWritten] ; +0x204, 0x180140550 mov r8, rdi ; +0x208, 0x180140554 mov edx, r12d ; +0x20b, 0x180140557 call ?write_text_ansi_nolock@@YA?AUwrite_result@?A0x17268360@@HQEBDI@Z ; +0x20e, 0x18014055a jmp short loc_1801404F6 ; +0x213, 0x18014055f mov rcx, [rcx+r15*8+28h]; hFile ; +0x215, 0x180140561 lea r9, [rbp+NumberOfBytesWritten+4]; lpNumberOfBytesWritten ; +0x21a, 0x180140566 xor eax, eax ; +0x21e, 0x18014056a mov r8d, r14d; nNumberOfBytesToWrite ; +0x220, 0x18014056c and [rsp+60h+var_40], rax ; +0x223, 0x18014056f mov rdx, rdi; lpBuffer ; +0x228, 0x180140574 mov qword ptr [rbp+NumberOfBytesWritten], rax ; +0x22b, 0x180140577 mov [rbp+var_28], eax ; +0x22f, 0x18014057b call cs:WriteFile ; +0x232, 0x18014057e test eax, eax ; +0x238, 0x180140584 jnz short loc_180140591 ; +0x23a, 0x180140586 call cs:GetLastError ; +0x23c, 0x180140588 mov [rbp+NumberOfBytesWritten], eax ; +0x242, 0x18014058e mov ebx, [rbp+var_28] ; +0x245, 0x180140591 movsd xmm0, qword ptr [rbp+NumberOfBytesWritten] ; +0x248, 0x180140594 movsd [rbp+var_20], xmm0 ; +0x24d, 0x180140599 mov rax, [rbp+var_20] ; +0x252, 0x18014059e shr rax, 20h ; +0x256, 0x1801405a2 test eax, eax ; +0x25a, 0x1801405a6 jnz short loc_18014060E ; +0x25c, 0x1801405a8 mov eax, dword ptr [rbp+var_20] ; +0x25e, 0x1801405aa test eax, eax ; +0x261, 0x1801405ad jz short loc_1801405DE ; +0x263, 0x1801405af cmp eax, 5 ; +0x265, 0x1801405b1 jnz short loc_1801405D1 ; +0x268, 0x1801405b4 call _errno ; +0x26a, 0x1801405b6 mov dword ptr [rax], 9 ; +0x26f, 0x1801405bb call __doserrno ; +0x275, 0x1801405c1 mov dword ptr [rax], 5 ; +0x27a, 0x1801405c6 jmp loc_180140393 ; +0x280, 0x1801405cc mov ecx, dword ptr [rbp+var_20] ; +0x285, 0x1801405d1 call __acrt_errno_map_os_error ; +0x288, 0x1801405d4 jmp loc_180140393 ; +0x28d, 0x1801405d9 lea rax, qword_1801F5160 ; +0x292, 0x1801405de mov rax, [rax+r13*8] ; +0x299, 0x1801405e5 test byte ptr [rax+r15*8+38h], 40h ; +0x29d, 0x1801405e9 jz short loc_1801405F6 ; +0x2a3, 0x1801405ef cmp byte ptr [rdi], 1Ah ; +0x2a5, 0x1801405f1 jz short loc_180140615 ; +0x2a8, 0x1801405f4 call _errno ; +0x2aa, 0x1801405f6 mov dword ptr [rax], 1Ch ; +0x2af, 0x1801405fb call __doserrno ; +0x2b5, 0x180140601 and dword ptr [rax], 0 ; +0x2ba, 0x180140606 jmp loc_180140393 ; +0x2bd, 0x180140609 mov eax, dword ptr [rbp+var_20+4] ; +0x2c2, 0x18014060e sub eax, ebx ; +0x2c5, 0x180140611 jmp short loc_180140617 ; +0x2c7, 0x180140613 xor eax, eax ; +0x2c9, 0x180140615 mov rbx, [rsp+60h+arg_18] ; +0x2cb, 0x180140617 add rsp, 60h ; +0x2d3, 0x18014061f pop r15 ; +0x2d7, 0x180140623 pop r14 ; +0x2d9, 0x180140625 pop r13 ; +0x2db, 0x180140627 pop r12 ; +0x2dd, 0x180140629 pop rdi ; +0x2df, 0x18014062b pop rsi ; +0x2e0, 0x18014062c pop rbp ; +0x2e1, 0x18014062d retn ; +0x2e2, 0x18014062e