; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 0x4720e0 */ | #include | ; (fcn) method.std::__1::ostreambuf_iterator_char__std::__1::char_traits_char____BloombergLP::bdldfp::DecimalNumPut_char__std::__1::ostreambuf_iterator_char__std::__1::char_traits_char_____::do_put_impl_BloombergLP::bdldfp.Decimal_Type32__std::__1::ostreambuf_it () | uint64_t method_std::_1::ostreambuf_iterator_char_std::_1::char_traits_char_BloombergLP::bdldfp::DecimalNumPut_char_std::_1::ostreambuf_iterator_char_std::_1::char_traits_char_::do_put_impl_BloombergLP::bdldfp_Decimal_Type32_std::_1::ostreambuf_it (uint32_t arg5, int64_t arg4, int64_t arg3, int64_t arg2) { | uint32_t var_4h; | int64_t var_8h; | uint32_t var_10h; | int64_t var_14h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int32_t var_34h; | int64_t var_38h; | int64_t var_40h; | uint32_t var_44h; | int64_t var_48h; | int64_t var_4ch; | uint32_t var_50h; | int64_t var_58h; | int64_t var_60h; | char * var_68h; | int64_t var_70h; | int64_t var_71h; | int64_t var_72h; | int64_t var_74h; | r8 = arg5; | rcx = arg4; | rdx = arg3; | rsi = arg2; | /* std::__1::ostreambuf_iterator > BloombergLP::bdldfp::DecimalNumPut > >::do_put_impl(std::__1::ostreambuf_iterator >, std::__1::ios_base&, char, BloombergLP::bdldfp::Decimal_Type32) const */ 0x004720e0 push rbp | 0x004720e1 push r15 | 0x004720e3 push r14 | 0x004720e5 push r13 | 0x004720e7 push r12 | 0x004720e9 push rbx | 0x004720ea sub rsp, 0x78 | 0x004720ee mov dword [rsp + 0x10], r8d | *((rsp + 0x10)) = r8d; 0x004720f3 mov dword [rsp + 0x14], ecx | *((rsp + 0x14)) = ecx; 0x004720f7 mov rbx, rsi | rbx = rsi; 0x004720fa mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x004720fe cmp r12, 0x65 | 0x00472102 mov eax, r12d | eax = r12d; 0x00472105 mov r13d, 0x65 | r13d = 0x65; 0x0047210b mov r14d, r12d | r14d = r12d; | if (r12 < 0x65) { 0x0047210e cmovl r13d, r12d | r13d = r12d; | } 0x00472112 mov r15d, dword [rdx + 0x18] | r15d = *((rdx + 0x18)); 0x00472116 mov dword [rsp + 0x48], r13d | *((rsp + 0x48)) = r13d; 0x0047211b mov qword [rsp + 0x4c], 2 | *((rsp + 0x4c)) = 2; 0x00472124 mov qword [rsp + 0x58], 0x50a13c | *((rsp + 0x58)) = 0x50a13c; 0x0047212d mov qword [rsp + 0x60], 0x509f09 | *((rsp + 0x60)) = 0x509f09; 0x00472136 mov qword [rsp + 0x68], 0x509f08 | *((rsp + 0x68)) = "snan"; 0x0047213f mov word [rsp + 0x70], 0x652e | *((rsp + 0x70)) = 0x652e; 0x00472146 mov dword [rsp + 0x74], 2 | *((rsp + 0x74)) = 2; 0x0047214e mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00472153 mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x00472156 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x0047215b je 0x47216b | 0x0047215d xor ecx, ecx | ecx = 0; 0x0047215f test eax, 0x100 | 0x00472164 sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00472167 mov dword [rsp + 0x4c], ecx | *((rsp + 0x4c)) = ecx; | } 0x0047216b test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x00472170 je 0x47217a | 0x00472172 mov dword [rsp + 0x50], 1 | *((rsp + 0x50)) = 1; | } 0x0047217a mov ecx, eax | ecx = eax; 0x0047217c shr ecx, 0xa | ecx >>= 0xa; 0x0047217f and cl, 1 | cl &= 1; 0x00472182 mov byte [rsp + 0x72], cl | *((rsp + 0x72)) = cl; 0x00472186 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x0047218b je 0x4721ad | 0x0047218d mov qword [rsp + 0x58], 0x509f0d | *((rsp + 0x58)) = 0x509f0d; 0x00472196 mov qword [rsp + 0x60], 0x509f12 | *((rsp + 0x60)) = 0x509f12; 0x0047219f mov qword [rsp + 0x68], 0x509f11 | *((rsp + 0x68)) = "SNAN"; 0x004721a8 mov byte [rsp + 0x71], 0x45 | *((rsp + 0x71)) = 0x45; | } 0x004721ad mov rbp, qword [rip + 0x4e7224] | rbp = BloombergLP::bslma::Default::s_defaultAllocator; 0x004721b4 test rbp, rbp | | if (rbp == 0) { 0x004721b7 jne 0x4721c1 | 0x004721b9 call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x004721be mov rbp, rax | | } 0x004721c1 mov rax, qword [rbp] | rax = *(rbp); 0x004721c5 mov esi, 0xc8 | esi = 0xc8; 0x004721ca mov rdi, rbp | rdi = rbp; 0x004721cd call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004721d0 lea rcx, [rsp + 0x48] | 0x004721d5 mov rdi, rax | rdi = rax; 0x004721d8 mov esi, 0xc8 | 0x004721dd mov edx, dword [rsp + 0x10] | 0x004721e1 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x004721e6 mov qword [rsp + 0x28], rbp | *((rsp + 0x28)) = rbp; 0x004721eb call 0x4775a0 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0xc8, *((rsp + 0x10)), rsp + 0x48); 0x004721f0 mov dword [rsp + 4], eax | *((rsp + 4)) = eax; 0x004721f4 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004721f9 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x004721fe call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00472203 mov dword [rsp + 0x40], r13d | *((rsp + 0x40)) = r13d; 0x00472208 sub r14d, r13d | r14d -= r13d; 0x0047220b mov ebp, r14d | 0x0047220e mov r13d, dword [rsp + 4] | r13d = *((rsp + 4)); 0x00472213 mov r14d, r13d | r14d = *((rsp + 4)); 0x00472216 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0047221b call 0x404b90 | std::_1::locale::~locale() (); 0x00472220 sub r15d, ebp | r15d -= ebp; 0x00472223 mov eax, r15d | eax = r15d; 0x00472226 xor r15d, r15d | r15d = 0; 0x00472229 sub eax, r13d | eax -= r13d; 0x0047222c mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; 0x00472230 cmovns r15d, eax | __asm ("cmovns r15d, eax"); 0x00472234 mov eax, r15d | eax = r15d; 0x00472237 or eax, ebp | eax |= ebp; | if (eax == 0) { 0x00472239 je 0x47232a | goto label_12; | } 0x0047223f mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00472244 lea r13, [rsi + r14] | r13 = rsi + r14; 0x00472248 mov qword [rsp + 0x38], r13 | *((rsp + 0x38)) = r13; 0x0047224d test ebp, ebp | 0x0047224f mov dword [rsp + 0x44], ebp | *((rsp + 0x44)) = ebp; | if (ebp == 0) { 0x00472253 je 0x4722c8 | goto label_13; | } 0x00472255 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x0047225a test byte [rax + 9], 1 | 0x0047225e mov r13, qword [rsp + 0x38] | r13 = *((rsp + 0x38)); | if ((*((rax + 9)) & 1) == 0) { 0x00472263 je 0x4722c8 | goto label_13; | } 0x00472265 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0047226a mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x0047226f call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00472274 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472279 mov esi, 0x959110 | esi = std::__1::ctype::id; 0x0047227e call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472283 movsx esi, byte [rsp + 0x71] | esi = *((rsp + 0x71)); 0x00472288 mov rcx, qword [rax] | rcx = *(rax); 0x0047228b mov rdi, rax | rdi = rax; 0x0047228e call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472291 mov ebp, eax | 0x00472293 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472298 call 0x404b90 | std::_1::locale::~locale() (); 0x0047229d mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x004722a2 cmp dword [rsp + 4], 0 | | if (*((rsp + 4)) == 0) { 0x004722a7 je 0x4722c3 | goto label_14; | } 0x004722a9 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x004722ae nop | | do { 0x004722b0 cmp byte [r13], bpl | | if (*(r13) == bpl) { 0x004722b4 je 0x4722c3 | goto label_14; | } 0x004722b6 inc r13 | r13++; 0x004722b9 dec r14 | r14--; 0x004722bc jne 0x4722b0 | | } while (r14 != 0); 0x004722be mov r13, qword [rsp + 0x38] | r13 = *((rsp + 0x38)); | label_14: 0x004722c3 mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); | label_13: 0x004722c8 cmp dword [rsp + 0x10], 0 | 0x004722cd setns al | __asm ("setns al"); 0x004722d0 cmp dword [rsp + 0x50], 1 | 0x004722d5 setne cl | cl = (*((rsp + 0x50)) != 1) ? 1 : 0; 0x004722d8 mov r14d, 0xb0 | r14d = 0xb0; 0x004722de mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); 0x004722e3 and r14d, dword [rdx + 8] | r14d &= *((rdx + 8)); 0x004722e7 test al, cl | | if ((al & cl) != 0) { 0x004722e9 jne 0x472393 | goto label_15; | } 0x004722ef cmp r14d, 0x10 | | if (r14d != 0x10) { 0x004722f3 jne 0x472393 | goto label_15; | } 0x004722f9 mov rbp, rsi | 0x004722fc inc rbp | rbp++; 0x004722ff test rbx, rbx | | if (rbx == 0) { 0x00472302 je 0x472398 | goto label_16; | } 0x00472308 mov rax, rsi | rax = rsi; 0x0047230b mov al, byte [rsi] | al = *(rsi); 0x0047230d mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472311 cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00472315 je 0x47239c | goto label_17; | } 0x0047231b lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0047231f mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472323 mov byte [rcx], al | *(rcx) = al; 0x00472325 jmp 0x4723b1 | goto label_18; | label_12: 0x0047232a test r13d, r13d | | if (r13d == 0) { 0x0047232d je 0x4725f2 | goto label_19; | } 0x00472333 xor ebp, ebp | ebp = 0; 0x00472335 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); 0x0047233a jmp 0x47234e | | while (rbx == 0) { | label_1: 0x00472340 xor ebx, ebx | ebx = 0; | label_0: 0x00472342 inc rbp | rbp++; 0x00472345 cmp r14, rbp | | if (r14 == rbp) { 0x00472348 je 0x4725f7 | goto label_20; | } 0x0047234e test rbx, rbx | 0x00472351 je 0x472340 | | } 0x00472353 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00472358 movzx eax, byte [rax + rbp] | eax = *((rax + rbp)); 0x0047235c mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472360 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472364 je 0x472380 | 0x00472366 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0047236a mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047236e mov byte [rcx], al | *(rcx) = al; 0x00472370 jmp 0x472342 | goto label_0; | } 0x00472380 movzx esi, al | esi = (int32_t) al; 0x00472383 mov rax, qword [rbx] | rax = *(rbx); 0x00472386 mov rdi, rbx | rdi = rbx; 0x00472389 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047238c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047238f je 0x472340 | goto label_1; | } 0x00472391 jmp 0x472342 | goto label_0; | label_15: 0x00472393 mov rbp, rsi | 0x00472396 jmp 0x4723b1 | goto label_18; | label_16: 0x00472398 xor ebx, ebx | ebx = 0; 0x0047239a jmp 0x4723b1 | goto label_18; | label_17: 0x0047239c movzx esi, al | esi = (int32_t) al; 0x0047239f mov rax, qword [rbx] | rax = *(rbx); 0x004723a2 mov rdi, rbx | rdi = rbx; 0x004723a5 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004723a8 xor ecx, ecx | ecx = 0; 0x004723aa cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004723ad cmove rbx, rcx | rbx = rcx; | } | label_18: 0x004723b1 cmp dword [rsp + 0x34], 0 | 0x004723b6 mov dword [rsp + 4], r14d | *((rsp + 4)) = r14d; | if (*((rsp + 0x34)) <= 0) { 0x004723bb jle 0x472424 | goto label_21; | } 0x004723bd cmp r14d, 0x20 | | if (r14d == 0x20) { 0x004723c1 je 0x472424 | goto label_21; | } 0x004723c3 movzx eax, byte [rsp + 0x14] | eax = *((rsp + 0x14)); 0x004723c8 mov dword [rsp + 0x10], eax | *((rsp + 0x10)) = eax; 0x004723cc lea r14d, [r15 + 1] | r14d = r15 + 1; 0x004723d0 jmp 0x4723eb | | while (rbx == 0) { | label_3: 0x004723e0 xor ebx, ebx | ebx = 0; | label_2: 0x004723e2 dec r14d | r14d--; 0x004723e5 cmp r14d, 1 | | if (r14d <= 1) { 0x004723e9 jle 0x472424 | goto label_21; | } 0x004723eb test rbx, rbx | 0x004723ee je 0x4723e0 | | } 0x004723f0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004723f4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004723f8 je 0x472410 | 0x004723fa lea rcx, [rax + 1] | rcx = rax + 1; 0x004723fe mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00472402 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x00472406 mov byte [rax], cl | *(rax) = cl; 0x00472408 jmp 0x4723e2 | goto label_2; | } 0x00472410 mov rax, qword [rbx] | rax = *(rbx); 0x00472413 mov rdi, rbx | rdi = rbx; 0x00472416 mov esi, dword [rsp + 0x10] | esi = *((rsp + 0x10)); 0x0047241a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047241d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472420 je 0x4723e0 | goto label_3; | } 0x00472422 jmp 0x4723e2 | goto label_2; | label_21: 0x00472424 cmp rbp, r13 | | if (rbp == r13) { 0x00472427 je 0x472473 | goto label_22; | } 0x00472429 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); 0x0047242e jmp 0x47243a | | while (rbx == 0) { | label_5: 0x00472430 xor ebx, ebx | ebx = 0; | label_4: 0x00472432 inc rbp | rbp++; 0x00472435 cmp r13, rbp | | if (r13 == rbp) { 0x00472438 je 0x472478 | goto label_23; | } 0x0047243a test rbx, rbx | 0x0047243d je 0x472430 | | } 0x0047243f movzx eax, byte [rbp] | eax = *(rbp); 0x00472443 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472447 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x0047244b je 0x472460 | 0x0047244d lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472451 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472455 mov byte [rcx], al | *(rcx) = al; 0x00472457 jmp 0x472432 | goto label_4; | } 0x00472460 movzx esi, al | esi = (int32_t) al; 0x00472463 mov rax, qword [rbx] | rax = *(rbx); 0x00472466 mov rdi, rbx | rdi = rbx; 0x00472469 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047246c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047246f je 0x472430 | goto label_5; | } 0x00472471 jmp 0x472432 | goto label_4; | label_22: 0x00472473 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); | label_23: 0x00472478 mov ebp, dword [rsp + 0x44] | ebp = *((rsp + 0x44)); 0x0047247c test ebp, ebp | | if (ebp == 0) { 0x0047247e je 0x472588 | goto label_24; | } 0x00472484 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472489 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x0047248e call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00472493 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472498 mov esi, 0x959110 | esi = std::__1::ctype::id; 0x0047249d call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x004724a2 mov rcx, qword [rax] | rcx = *(rax); 0x004724a5 mov rdi, rax | rdi = rax; 0x004724a8 mov esi, 0x30 | esi = 0x30; 0x004724ad call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x004724b0 mov r14d, eax | r14d = eax; 0x004724b3 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004724b8 call 0x404b90 | std::_1::locale::~locale() (); 0x004724bd test ebp, ebp | | if (ebp <= 0) { 0x004724bf jle 0x472512 | goto label_25; | } 0x004724c1 movzx ebp, r14b | ebp = (int32_t) r14b; 0x004724c5 sub r12d, dword [rsp + 0x40] | r12d -= *((rsp + 0x40)); 0x004724ca inc r12d | r12d++; 0x004724cd jmp 0x4724db | | while (rbx == 0) { | label_7: 0x004724d0 xor ebx, ebx | ebx = 0; | label_6: 0x004724d2 dec r12d | r12d--; 0x004724d5 cmp r12d, 1 | | if (r12d <= 1) { 0x004724d9 jle 0x472512 | goto label_25; | } 0x004724db test rbx, rbx | 0x004724de je 0x4724d0 | | } 0x004724e0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004724e4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004724e8 je 0x472500 | 0x004724ea lea rcx, [rax + 1] | rcx = rax + 1; 0x004724ee mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x004724f2 mov byte [rax], r14b | *(rax) = r14b; 0x004724f5 jmp 0x4724d2 | goto label_6; | } 0x00472500 mov rax, qword [rbx] | rax = *(rbx); 0x00472503 mov rdi, rbx | rdi = rbx; 0x00472506 mov esi, ebp | esi = ebp; 0x00472508 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047250b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047250e je 0x4724d0 | goto label_7; | } 0x00472510 jmp 0x4724d2 | goto label_6; | label_25: 0x00472512 mov rbp, qword [rsp + 0x38] | rbp = *((rsp + 0x38)); 0x00472517 cmp r13, rbp | | if (r13 == rbp) { 0x0047251a je 0x472583 | goto label_26; | } 0x0047251c mov eax, 0x100 | eax = 0x100; 0x00472521 mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x00472526 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); 0x00472529 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); | if (eax != 0) { 0x0047252e jne 0x47254a | goto label_27; | } 0x00472530 jmp 0x472588 | goto label_24; | do { | label_9: 0x00472540 xor ebx, ebx | ebx = 0; | label_8: 0x00472542 inc r13 | r13++; 0x00472545 cmp rbp, r13 | | if (rbp == r13) { 0x00472548 je 0x472588 | goto label_24; | } | label_27: 0x0047254a test rbx, rbx | 0x0047254d je 0x472540 | | } while (rbx == 0); 0x0047254f movzx eax, byte [r13] | eax = *(r13); 0x00472554 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472558 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x0047255c je 0x472570 | 0x0047255e lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472562 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472566 mov byte [rcx], al | *(rcx) = al; 0x00472568 jmp 0x472542 | goto label_8; | } 0x00472570 movzx esi, al | esi = (int32_t) al; 0x00472573 mov rax, qword [rbx] | rax = *(rbx); 0x00472576 mov rdi, rbx | rdi = rbx; 0x00472579 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047257c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047257f je 0x472540 | goto label_9; | } 0x00472581 jmp 0x472542 | goto label_8; | label_26: 0x00472583 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); | label_24: 0x00472588 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) <= 0) { 0x0047258d jle 0x4725f2 | goto label_19; | } 0x0047258f cmp r14d, 0x20 | 0x00472593 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); | if (r14d != 0x20) { 0x00472598 jne 0x4725f7 | goto label_20; | } 0x0047259a movzx ebp, byte [rsp + 0x14] | ebp = *((rsp + 0x14)); 0x0047259f inc r15d | r15d++; 0x004725a2 jmp 0x4725bb | | while (rbx == 0) { | label_11: 0x004725b0 xor ebx, ebx | ebx = 0; | label_10: 0x004725b2 dec r15d | r15d--; 0x004725b5 cmp r15d, 1 | | if (r15d <= 1) { 0x004725b9 jle 0x4725f7 | goto label_20; | } 0x004725bb test rbx, rbx | 0x004725be je 0x4725b0 | | } 0x004725c0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004725c4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004725c8 je 0x4725e0 | 0x004725ca lea rcx, [rax + 1] | rcx = rax + 1; 0x004725ce mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x004725d2 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x004725d6 mov byte [rax], cl | *(rax) = cl; 0x004725d8 jmp 0x4725b2 | goto label_10; | } 0x004725e0 mov rax, qword [rbx] | rax = *(rbx); 0x004725e3 mov rdi, rbx | rdi = rbx; 0x004725e6 mov esi, ebp | esi = ebp; 0x004725e8 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004725eb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004725ee je 0x4725b0 | goto label_11; | } 0x004725f0 jmp 0x4725b2 | goto label_10; | label_19: 0x004725f2 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); | label_20: 0x004725f7 mov rax, qword [r12] | rax = *(r12); 0x004725fb mov rdi, r12 | rdi = r12; 0x004725fe mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00472603 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00472606 mov rax, rbx | rax = rbx; 0x00472609 add rsp, 0x78 | 0x0047260d pop rbx | 0x0047260e pop r12 | 0x00472610 pop r13 | 0x00472612 pop r14 | 0x00472614 pop r15 | 0x00472616 pop rbp | 0x00472617 ret | return rax; | }