; ; sub_180003F70 from 0x180003f70 to 0x1800041ce (606 bytes) ; ; 5 xrefs: ; > sub_180017A50 @ 0x180017b58 ; > sub_180017E70 @ 0x180018015 ; > @ 0x18017d5b0 ; > @ 0x18017d5c0 ; > @ 0x1801f6240 ; ; 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+arg_10], r8d ; +0x0, 0x180003f70 mov [rsp+arg_8], rdx ; +0x5, 0x180003f75 push rbx ; +0xa, 0x180003f7a push rbp ; +0xb, 0x180003f7b push rsi ; +0xc, 0x180003f7c push r13 ; +0xd, 0x180003f7d push r15 ; +0xf, 0x180003f7f sub rsp, 40h ; +0x11, 0x180003f81 mov r13, [rcx] ; +0x15, 0x180003f85 mov rbp, rdx ; +0x18, 0x180003f88 mov rbx, rcx ; +0x1b, 0x180003f8b mov edx, 1 ; +0x1e, 0x180003f8e mov rcx, rbp ; +0x23, 0x180003f93 mov r15d, r8d ; +0x26, 0x180003f96 mov rsi, [r13+20h] ; +0x29, 0x180003f99 mov [rsp+68h+arg_0], rsi ; +0x2d, 0x180003f9d call sub_180001340 ; +0x32, 0x180003fa2 test eax, eax ; +0x37, 0x180003fa7 jz short loc_180003FBC ; +0x39, 0x180003fa9 mov eax, 0FFFFFF79h ; +0x3b, 0x180003fab add rsp, 40h ; +0x40, 0x180003fb0 pop r15 ; +0x44, 0x180003fb4 pop r13 ; +0x46, 0x180003fb6 pop rsi ; +0x48, 0x180003fb8 pop rbp ; +0x49, 0x180003fb9 pop rbx ; +0x4a, 0x180003fba retn ; +0x4b, 0x180003fbb mov eax, [rsi+8] ; +0x4c, 0x180003fbc mov [rsp+68h+var_30], rdi ; +0x4f, 0x180003fbf xor edi, edi ; +0x54, 0x180003fc4 test eax, eax ; +0x56, 0x180003fc6 mov edx, edi ; +0x58, 0x180003fc8 lea ecx, [rax-1] ; +0x5a, 0x180003fca cmovz ecx, eax ; +0x5d, 0x180003fcd test ecx, ecx ; +0x60, 0x180003fd0 jz short loc_180003FDA ; +0x62, 0x180003fd2 inc edx ; +0x64, 0x180003fd4 shr ecx, 1 ; +0x66, 0x180003fd6 jnz short loc_180003FD4 ; +0x68, 0x180003fd8 mov rcx, rbp ; +0x6a, 0x180003fda mov [rsp+68h+var_40], r14 ; +0x6d, 0x180003fdd call sub_180001340 ; +0x72, 0x180003fe2 cmp eax, 0FFFFFFFFh ; +0x77, 0x180003fe7 jz loc_1800041B3 ; +0x7a, 0x180003fea cmp eax, [rsi+8] ; +0x80, 0x180003ff0 jge loc_1800041B3 ; +0x83, 0x180003ff3 movsxd rcx, dword ptr [rbx+28h] ; +0x89, 0x180003ff9 mov [rbx+24h], ecx ; +0x8d, 0x180003ffd cdqe ; +0x90, 0x180004000 mov [rsp+68h+var_38], r12 ; +0x92, 0x180004002 mov r12d, edi ; +0x97, 0x180004007 lea r14, [rax+rax] ; +0x9a, 0x18000400a mov rax, [rsi+20h] ; +0x9e, 0x18000400e mov [rsp+68h+arg_18], r14 ; +0xa2, 0x180004012 movzx edx, byte ptr [rax+r14] ; +0xaa, 0x18000401a mov [rbx+28h], edx ; +0xaf, 0x18000401f mov ecx, [rsi+rcx*4] ; +0xb2, 0x180004022 sar ecx, 2 ; +0xb5, 0x180004025 cmp [r13+4], edi ; +0xb8, 0x180004028 jle short loc_180004095 ; +0xbc, 0x18000402c movsxd rbp, ecx ; +0xbe, 0x18000402e mov r14d, edi ; +0xc1, 0x180004031 mov r15d, edi ; +0xc4, 0x180004034 lea rsi, ds:0[rbp*4] ; +0xc7, 0x180004037 nop ; +0xcf, 0x18000403f mov rax, [rbx+8] ; +0xd0, 0x180004040 mov r8, rsi; Size ; +0xd4, 0x180004044 movsxd rcx, r15d ; +0xd7, 0x180004047 add rcx, rbp ; +0xda, 0x18000404a lea rdx, [rax+rcx*4]; Src ; +0xdd, 0x18000404d mov rax, [rbx+10h] ; +0xe1, 0x180004051 movsxd rcx, r14d ; +0xe5, 0x180004055 lea rcx, [rax+rcx*4]; void * ; +0xe8, 0x180004058 call memmove ; +0xec, 0x18000405c inc r12d ; +0xf1, 0x180004061 add r15d, 400h ; +0xf4, 0x180004064 add r14d, 200h ; +0xfb, 0x18000406b cmp r12d, [r13+4] ; +0x102, 0x180004072 jl short loc_180004040 ; +0x106, 0x180004076 mov edx, [rbx+28h] ; +0x108, 0x180004078 mov rsi, [rsp+68h+arg_0] ; +0x10b, 0x18000407b mov rbp, [rsp+68h+arg_8] ; +0x110, 0x180004080 mov r14, [rsp+68h+arg_18] ; +0x115, 0x180004085 mov r15d, [rsp+68h+arg_10] ; +0x11d, 0x18000408d mov r12, [rsp+68h+var_38] ; +0x125, 0x180004095 test edx, edx ; +0x12a, 0x18000409a jz short loc_1800040C1 ; +0x12c, 0x18000409c mov edx, 1 ; +0x12e, 0x18000409e mov rcx, rbp ; +0x133, 0x1800040a3 call sub_180001340 ; +0x136, 0x1800040a6 mov edx, 1 ; +0x13b, 0x1800040ab mov rcx, rbp ; +0x140, 0x1800040b0 call sub_180001340 ; +0x143, 0x1800040b3 cmp eax, 0FFFFFFFFh ; +0x148, 0x1800040b8 jz loc_1800041B3 ; +0x14b, 0x1800040bb test r15d, r15d ; +0x151, 0x1800040c1 jz short loc_1800040E7 ; +0x154, 0x1800040c4 mov rax, [rsi+20h] ; +0x156, 0x1800040c6 movzx ecx, byte ptr [rax+r14+1] ; +0x15a, 0x1800040ca mov rax, [rsi+28h] ; +0x160, 0x1800040d0 lea rdx, [rcx+rcx*4] ; +0x164, 0x1800040d4 mov rcx, rbx ; +0x168, 0x1800040d8 lea r8, [rax+rdx*8] ; +0x16b, 0x1800040db mov rdx, rbp ; +0x16f, 0x1800040df call sub_180008050 ; +0x172, 0x1800040e2 mov eax, [rbx+18h] ; +0x177, 0x1800040e7 mov [rbx+18h], edi ; +0x17a, 0x1800040ea cmp eax, 0FFFFFFFFh ; +0x17d, 0x1800040ed jnz short loc_1800040F6 ; +0x180, 0x1800040f0 mov ecx, edi ; +0x182, 0x1800040f2 jmp short loc_180004119 ; +0x184, 0x1800040f4 movsxd rax, dword ptr [rbx+28h] ; +0x186, 0x1800040f6 mov eax, [rsi+rax*4] ; +0x18a, 0x1800040fa cdq ; +0x18d, 0x1800040fd and edx, 3 ; +0x18e, 0x1800040fe lea ecx, [rdx+rax] ; +0x191, 0x180004101 movsxd rax, dword ptr [rbx+24h] ; +0x194, 0x180004104 sar ecx, 2 ; +0x198, 0x180004108 mov eax, [rsi+rax*4] ; +0x19b, 0x18000410b cdq ; +0x19e, 0x18000410e and edx, 3 ; +0x19f, 0x18000410f add eax, edx ; +0x1a2, 0x180004112 sar eax, 2 ; +0x1a4, 0x180004114 add ecx, eax ; +0x1a7, 0x180004117 mov [rbx+1Ch], ecx ; +0x1a9, 0x180004119 mov rax, [rbx+38h] ; +0x1ac, 0x18000411c cmp rax, 0FFFFFFFFFFFFFFFFh ; +0x1b0, 0x180004120 jnz short loc_180004136 ; +0x1b4, 0x180004124 mov [rbx+30h], rax ; +0x1b6, 0x180004126 inc rax ; +0x1ba, 0x18000412a mov [rbx+38h], rax ; +0x1bd, 0x18000412d mov rax, rdi ; +0x1c1, 0x180004131 jmp short loc_180004174 ; +0x1c4, 0x180004134 mov r8, [rbx+40h] ; +0x1c6, 0x180004136 inc rax ; +0x1ca, 0x18000413a mov [rbx+38h], rax ; +0x1cd, 0x18000413d cmp r8, 0FFFFFFFFFFFFFFFFh ; +0x1d1, 0x180004141 jnz short loc_18000414C ; +0x1d5, 0x180004145 mov rax, rdi ; +0x1d7, 0x180004147 jmp short loc_180004174 ; +0x1da, 0x18000414a movsxd rax, dword ptr [rbx+28h] ; +0x1dc, 0x18000414c mov eax, [rsi+rax*4] ; +0x1e0, 0x180004150 cdq ; +0x1e3, 0x180004153 and edx, 3 ; +0x1e4, 0x180004154 lea ecx, [rdx+rax] ; +0x1e7, 0x180004157 movsxd rax, dword ptr [rbx+24h] ; +0x1ea, 0x18000415a sar ecx, 2 ; +0x1ee, 0x18000415e mov eax, [rsi+rax*4] ; +0x1f1, 0x180004161 cdq ; +0x1f4, 0x180004164 and edx, 3 ; +0x1f5, 0x180004165 add eax, edx ; +0x1f8, 0x180004168 sar eax, 2 ; +0x1fa, 0x18000416a add eax, ecx ; +0x1fd, 0x18000416d cdqe ; +0x1ff, 0x18000416f add rax, r8 ; +0x201, 0x180004171 mov [rbx+40h], rax ; +0x204, 0x180004174 mov r8, [rbx+30h] ; +0x208, 0x180004178 cmp r8, 0FFFFFFFFFFFFFFFFh ; +0x20c, 0x18000417c jz short loc_1800041AB ; +0x210, 0x180004180 movsxd rax, dword ptr [rbx+28h] ; +0x212, 0x180004182 mov eax, [rsi+rax*4] ; +0x216, 0x180004186 cdq ; +0x219, 0x180004189 and edx, 3 ; +0x21a, 0x18000418a lea ecx, [rdx+rax] ; +0x21d, 0x18000418d movsxd rax, dword ptr [rbx+24h] ; +0x220, 0x180004190 sar ecx, 2 ; +0x224, 0x180004194 mov eax, [rsi+rax*4] ; +0x227, 0x180004197 cdq ; +0x22a, 0x18000419a and edx, 3 ; +0x22b, 0x18000419b add eax, edx ; +0x22e, 0x18000419e sar eax, 2 ; +0x230, 0x1800041a0 add ecx, eax ; +0x233, 0x1800041a3 movsxd rdi, ecx ; +0x235, 0x1800041a5 add rdi, r8 ; +0x238, 0x1800041a8 mov [rbx+30h], rdi ; +0x23b, 0x1800041ab xor eax, eax ; +0x23f, 0x1800041af jmp short loc_1800041B8 ; +0x241, 0x1800041b1 mov eax, 0FFFFFF78h ; +0x243, 0x1800041b3 mov r14, [rsp+68h+var_40] ; +0x248, 0x1800041b8 mov rdi, [rsp+68h+var_30] ; +0x24d, 0x1800041bd add rsp, 40h ; +0x252, 0x1800041c2 pop r15 ; +0x256, 0x1800041c6 pop r13 ; +0x258, 0x1800041c8 pop rsi ; +0x25a, 0x1800041ca pop rbp ; +0x25b, 0x1800041cb pop rbx ; +0x25c, 0x1800041cc retn ; +0x25d, 0x1800041cd