; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x472680 */ | #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_Type64__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_Type64_std::_1::ostreambuf_it (uint32_t arg5, int64_t arg4, int64_t arg3, int64_t arg2) { | uint32_t var_4h; | int64_t var_8h; | int64_t var_14h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int32_t var_34h; | uint32_t var_38h; | int64_t var_40h; | uint32_t var_4ch; | int64_t var_50h; | int64_t var_54h; | uint32_t var_58h; | int64_t var_60h; | int64_t var_68h; | char * var_70h; | int64_t var_78h; | int64_t var_79h; | int64_t var_7ah; | int64_t var_7ch; | int64_t var_80h; | 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_Type64) const */ 0x00472680 push rbp | 0x00472681 push r15 | 0x00472683 push r14 | 0x00472685 push r13 | 0x00472687 push r12 | 0x00472689 push rbx | 0x0047268a sub rsp, 0x88 | 0x00472691 mov qword [rsp + 0x38], r8 | *((rsp + 0x38)) = r8; 0x00472696 mov dword [rsp + 0x14], ecx | *((rsp + 0x14)) = ecx; 0x0047269a mov rbx, rsi | rbx = rsi; 0x0047269d mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x004726a1 cmp r12, 0x18e | 0x004726a8 mov r13d, 0x18e | r13d = 0x18e; | if (r12 < 0x18e) { 0x004726ae cmovl r13, r12 | r13 = r12; | } 0x004726b2 mov r15d, dword [rdx + 0x18] | r15d = *((rdx + 0x18)); 0x004726b6 mov dword [rsp + 0x50], r13d | *((rsp + 0x50)) = r13d; 0x004726bb mov qword [rsp + 0x54], 2 | *((rsp + 0x54)) = 2; 0x004726c4 mov qword [rsp + 0x60], 0x50a7ac | *((rsp + 0x60)) = 0x50a7ac; 0x004726cd mov qword [rsp + 0x68], 0x50a579 | *((rsp + 0x68)) = 0x50a579; 0x004726d6 mov qword [rsp + 0x70], 0x50a578 | *((rsp + 0x70)) = "snan"; 0x004726df mov word [rsp + 0x78], 0x652e | *((rsp + 0x78)) = 0x652e; 0x004726e6 mov dword [rsp + 0x7c], 2 | *((rsp + 0x7c)) = 2; 0x004726ee mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x004726f3 mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x004726f6 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x004726fb je 0x47270b | 0x004726fd xor ecx, ecx | ecx = 0; 0x004726ff test eax, 0x100 | 0x00472704 sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00472707 mov dword [rsp + 0x54], ecx | *((rsp + 0x54)) = ecx; | } 0x0047270b test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x00472710 je 0x47271a | 0x00472712 mov dword [rsp + 0x58], 1 | *((rsp + 0x58)) = 1; | } 0x0047271a mov ecx, eax | ecx = eax; 0x0047271c shr ecx, 0xa | ecx >>= 0xa; 0x0047271f and cl, 1 | cl &= 1; 0x00472722 mov byte [rsp + 0x7a], cl | *((rsp + 0x7a)) = cl; 0x00472726 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x0047272b je 0x47274d | 0x0047272d mov qword [rsp + 0x60], 0x50a57d | *((rsp + 0x60)) = 0x50a57d; 0x00472736 mov qword [rsp + 0x68], 0x50a582 | *((rsp + 0x68)) = 0x50a582; 0x0047273f mov qword [rsp + 0x70], 0x50a581 | *((rsp + 0x70)) = "SNAN"; 0x00472748 mov byte [rsp + 0x79], 0x45 | *((rsp + 0x79)) = 0x45; | } 0x0047274d mov rdi, qword [rip + 0x4e7c84] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00472754 test rdi, rdi | | if (rdi == 0) { 0x00472757 jne 0x472761 | 0x00472759 call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0047275e mov rdi, rax | rdi = rax; | } 0x00472761 mov rax, qword [rdi] | rax = *(rdi); 0x00472764 mov esi, 0x311 | esi = 0x311; 0x00472769 mov qword [rsp + 0x28], rdi | *((rsp + 0x28)) = rdi; 0x0047276e call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00472771 mov rbp, rax | 0x00472774 lea rcx, [rsp + 0x50] | 0x00472779 mov rdi, rax | rdi = rax; 0x0047277c mov esi, 0x311 | 0x00472781 mov rdx, qword [rsp + 0x38] | 0x00472786 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x0047278b call 0x477900 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0x311, *((rsp + 0x38)), rsp + 0x50); 0x00472790 mov r14d, eax | r14d = eax; 0x00472793 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472798 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x0047279d call 0x404a70 | std::_1::ios_base::getloc()const (); 0x004727a2 mov eax, r12d | eax = r12d; 0x004727a5 mov qword [rsp + 0x80], r13 | *((rsp + 0x80)) = r13; 0x004727ad sub eax, r13d | eax -= r13d; 0x004727b0 mov ebp, eax | 0x004727b2 mov r13d, r14d | r13d = r14d; 0x004727b5 movsxd r14, r14d | r14 = (int64_t) r14d; 0x004727b8 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x004727bd call 0x404be0 | std::_1::locale::~locale() (); 0x004727c2 sub r15d, ebp | r15d -= ebp; 0x004727c5 mov eax, r15d | eax = r15d; 0x004727c8 xor r15d, r15d | r15d = 0; 0x004727cb sub eax, r14d | eax -= r14d; 0x004727ce mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; 0x004727d2 cmovns r15d, eax | __asm ("cmovns r15d, eax"); 0x004727d6 mov eax, r15d | eax = r15d; 0x004727d9 or eax, ebp | eax |= ebp; | if (eax == 0) { 0x004727db je 0x4728d8 | goto label_12; | } 0x004727e1 mov dword [rsp + 4], r13d | *((rsp + 4)) = r13d; 0x004727e6 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x004727eb lea r13, [rax + r14] | r13 = rax + r14; 0x004727ef mov qword [rsp + 0x40], r13 | *((rsp + 0x40)) = r13; 0x004727f4 mov dword [rsp + 0x4c], ebp | *((rsp + 0x4c)) = ebp; 0x004727f8 test ebp, ebp | | if (ebp == 0) { 0x004727fa je 0x472873 | goto label_13; | } 0x004727fc mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472801 test byte [rax + 9], 1 | 0x00472805 mov r13, qword [rsp + 0x40] | r13 = *((rsp + 0x40)); | if ((*((rax + 9)) & 1) == 0) { 0x0047280a je 0x472873 | goto label_13; | } 0x0047280c lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472811 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00472816 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x0047281b lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472820 mov esi, 0x95a110 | esi = std::__1::ctype::id; 0x00472825 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0047282a movsx esi, byte [rsp + 0x79] | esi = *((rsp + 0x79)); 0x0047282f mov rcx, qword [rax] | rcx = *(rax); 0x00472832 mov rdi, rax | rdi = rax; 0x00472835 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472838 mov ebp, eax | 0x0047283a lea rdi, [rsp + 8] | rdi = rsp + 8; 0x0047283f call 0x404be0 | std::_1::locale::~locale() (); 0x00472844 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x00472849 cmp dword [rsp + 4], 0 | | if (*((rsp + 4)) == 0) { 0x0047284e je 0x472873 | goto label_13; | } 0x00472850 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x00472855 nop word cs:[rax + rax] | 0x0047285f nop | | do { 0x00472860 cmp byte [r13], bpl | | if (*(r13) == bpl) { 0x00472864 je 0x472873 | goto label_13; | } 0x00472866 inc r13 | r13++; 0x00472869 dec r14 | r14--; 0x0047286c jne 0x472860 | | } while (r14 != 0); 0x0047286e mov r13, qword [rsp + 0x40] | r13 = *((rsp + 0x40)); | label_13: 0x00472873 cmp qword [rsp + 0x38], 0 | 0x00472879 setns al | __asm ("setns al"); 0x0047287c cmp dword [rsp + 0x58], 1 | 0x00472881 setne cl | cl = (*((rsp + 0x58)) != 1) ? 1 : 0; 0x00472884 mov r14d, 0xb0 | r14d = 0xb0; 0x0047288a mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); 0x0047288f and r14d, dword [rdx + 8] | r14d &= *((rdx + 8)); 0x00472893 test al, cl | | if ((al & cl) != 0) { 0x00472895 jne 0x472943 | goto label_14; | } 0x0047289b cmp r14d, 0x10 | 0x0047289f mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); | if (r14d != 0x10) { 0x004728a4 jne 0x47294a | goto label_15; | } 0x004728aa mov rbp, rax | 0x004728ad inc rbp | rbp++; 0x004728b0 test rbx, rbx | | if (rbx == 0) { 0x004728b3 je 0x47294f | goto label_16; | } 0x004728b9 mov al, byte [rax] | al = *(rax); 0x004728bb mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004728bf cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x004728c3 je 0x472953 | goto label_17; | } 0x004728c9 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x004728cd mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004728d1 mov byte [rcx], al | *(rcx) = al; 0x004728d3 jmp 0x472968 | goto label_18; | label_12: 0x004728d8 test r13d, r13d | | if (r13d == 0) { 0x004728db je 0x472bb2 | goto label_19; | } 0x004728e1 xor ebp, ebp | ebp = 0; 0x004728e3 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); 0x004728e8 jmp 0x4728fe | | while (rbx == 0) { | label_1: 0x004728f0 xor ebx, ebx | ebx = 0; | label_0: 0x004728f2 inc rbp | rbp++; 0x004728f5 cmp r14, rbp | | if (r14 == rbp) { 0x004728f8 je 0x472bb7 | goto label_20; | } 0x004728fe test rbx, rbx | 0x00472901 je 0x4728f0 | | } 0x00472903 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00472908 movzx eax, byte [rax + rbp] | eax = *((rax + rbp)); 0x0047290c mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472910 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472914 je 0x472930 | 0x00472916 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0047291a mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047291e mov byte [rcx], al | *(rcx) = al; 0x00472920 jmp 0x4728f2 | goto label_0; | } 0x00472930 movzx esi, al | esi = (int32_t) al; 0x00472933 mov rax, qword [rbx] | rax = *(rbx); 0x00472936 mov rdi, rbx | rdi = rbx; 0x00472939 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047293c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047293f je 0x4728f0 | goto label_1; | } 0x00472941 jmp 0x4728f2 | goto label_0; | label_14: 0x00472943 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x00472948 jmp 0x472968 | goto label_18; | label_15: 0x0047294a mov rbp, rax | 0x0047294d jmp 0x472968 | goto label_18; | label_16: 0x0047294f xor ebx, ebx | ebx = 0; 0x00472951 jmp 0x472968 | goto label_18; | label_17: 0x00472953 movzx esi, al | esi = (int32_t) al; 0x00472956 mov rax, qword [rbx] | rax = *(rbx); 0x00472959 mov rdi, rbx | rdi = rbx; 0x0047295c call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047295f xor ecx, ecx | ecx = 0; 0x00472961 cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472964 cmove rbx, rcx | rbx = rcx; | } | label_18: 0x00472968 cmp dword [rsp + 0x34], 0 | 0x0047296d mov dword [rsp + 4], r14d | *((rsp + 4)) = r14d; | if (*((rsp + 0x34)) <= 0) { 0x00472972 jle 0x4729d4 | goto label_21; | } 0x00472974 cmp r14d, 0x20 | | if (r14d == 0x20) { 0x00472978 je 0x4729d4 | goto label_21; | } 0x0047297a movzx eax, byte [rsp + 0x14] | eax = *((rsp + 0x14)); 0x0047297f mov dword [rsp + 0x38], eax | *((rsp + 0x38)) = eax; 0x00472983 lea r14d, [r15 + 1] | r14d = r15 + 1; 0x00472987 jmp 0x47299b | | while (rbx == 0) { | label_3: 0x00472990 xor ebx, ebx | ebx = 0; | label_2: 0x00472992 dec r14d | r14d--; 0x00472995 cmp r14d, 1 | | if (r14d <= 1) { 0x00472999 jle 0x4729d4 | goto label_21; | } 0x0047299b test rbx, rbx | 0x0047299e je 0x472990 | | } 0x004729a0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004729a4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004729a8 je 0x4729c0 | 0x004729aa lea rcx, [rax + 1] | rcx = rax + 1; 0x004729ae mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x004729b2 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x004729b6 mov byte [rax], cl | *(rax) = cl; 0x004729b8 jmp 0x472992 | goto label_2; | } 0x004729c0 mov rax, qword [rbx] | rax = *(rbx); 0x004729c3 mov rdi, rbx | rdi = rbx; 0x004729c6 mov esi, dword [rsp + 0x38] | esi = *((rsp + 0x38)); 0x004729ca call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004729cd cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004729d0 je 0x472990 | goto label_3; | } 0x004729d2 jmp 0x472992 | goto label_2; | label_21: 0x004729d4 cmp rbp, r13 | | if (rbp == r13) { 0x004729d7 je 0x472a23 | goto label_22; | } 0x004729d9 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); 0x004729de jmp 0x4729ea | | while (rbx == 0) { | label_5: 0x004729e0 xor ebx, ebx | ebx = 0; | label_4: 0x004729e2 inc rbp | rbp++; 0x004729e5 cmp r13, rbp | | if (r13 == rbp) { 0x004729e8 je 0x472a28 | goto label_23; | } 0x004729ea test rbx, rbx | 0x004729ed je 0x4729e0 | | } 0x004729ef movzx eax, byte [rbp] | eax = *(rbp); 0x004729f3 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004729f7 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x004729fb je 0x472a10 | 0x004729fd lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472a01 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472a05 mov byte [rcx], al | *(rcx) = al; 0x00472a07 jmp 0x4729e2 | goto label_4; | } 0x00472a10 movzx esi, al | esi = (int32_t) al; 0x00472a13 mov rax, qword [rbx] | rax = *(rbx); 0x00472a16 mov rdi, rbx | rdi = rbx; 0x00472a19 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472a1c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472a1f je 0x4729e0 | goto label_5; | } 0x00472a21 jmp 0x4729e2 | goto label_4; | label_22: 0x00472a23 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); | label_23: 0x00472a28 mov ebp, dword [rsp + 0x4c] | ebp = *((rsp + 0x4c)); 0x00472a2c test ebp, ebp | | if (ebp == 0) { 0x00472a2e je 0x472b48 | goto label_24; | } 0x00472a34 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472a39 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00472a3e call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00472a43 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472a48 mov esi, 0x95a110 | esi = std::__1::ctype::id; 0x00472a4d call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472a52 mov rcx, qword [rax] | rcx = *(rax); 0x00472a55 mov rdi, rax | rdi = rax; 0x00472a58 mov esi, 0x30 | esi = 0x30; 0x00472a5d call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472a60 mov r14d, eax | r14d = eax; 0x00472a63 lea rdi, [rsp + 8] | rdi = rsp + 8; 0x00472a68 call 0x404be0 | std::_1::locale::~locale() (); 0x00472a6d test ebp, ebp | | if (ebp <= 0) { 0x00472a6f jle 0x472ad2 | goto label_25; | } 0x00472a71 movzx ebp, r14b | ebp = (int32_t) r14b; 0x00472a75 sub r12d, dword [rsp + 0x80] | r12d -= *((rsp + 0x80)); 0x00472a7d inc r12d | r12d++; 0x00472a80 jmp 0x472a9b | | while (rbx == 0) { | label_7: 0x00472a90 xor ebx, ebx | ebx = 0; | label_6: 0x00472a92 dec r12d | r12d--; 0x00472a95 cmp r12d, 1 | | if (r12d <= 1) { 0x00472a99 jle 0x472ad2 | goto label_25; | } 0x00472a9b test rbx, rbx | 0x00472a9e je 0x472a90 | | } 0x00472aa0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00472aa4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00472aa8 je 0x472ac0 | 0x00472aaa lea rcx, [rax + 1] | rcx = rax + 1; 0x00472aae mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00472ab2 mov byte [rax], r14b | *(rax) = r14b; 0x00472ab5 jmp 0x472a92 | goto label_6; | } 0x00472ac0 mov rax, qword [rbx] | rax = *(rbx); 0x00472ac3 mov rdi, rbx | rdi = rbx; 0x00472ac6 mov esi, ebp | esi = ebp; 0x00472ac8 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472acb cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472ace je 0x472a90 | goto label_7; | } 0x00472ad0 jmp 0x472a92 | goto label_6; | label_25: 0x00472ad2 mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x00472ad7 cmp r13, rbp | | if (r13 == rbp) { 0x00472ada je 0x472b43 | goto label_26; | } 0x00472adc mov eax, 0x100 | eax = 0x100; 0x00472ae1 mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x00472ae6 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); 0x00472ae9 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); | if (eax != 0) { 0x00472aee jne 0x472b0a | goto label_27; | } 0x00472af0 jmp 0x472b48 | goto label_24; | do { | label_9: 0x00472b00 xor ebx, ebx | ebx = 0; | label_8: 0x00472b02 inc r13 | r13++; 0x00472b05 cmp rbp, r13 | | if (rbp == r13) { 0x00472b08 je 0x472b48 | goto label_24; | } | label_27: 0x00472b0a test rbx, rbx | 0x00472b0d je 0x472b00 | | } while (rbx == 0); 0x00472b0f movzx eax, byte [r13] | eax = *(r13); 0x00472b14 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472b18 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472b1c je 0x472b30 | 0x00472b1e lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472b22 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472b26 mov byte [rcx], al | *(rcx) = al; 0x00472b28 jmp 0x472b02 | goto label_8; | } 0x00472b30 movzx esi, al | esi = (int32_t) al; 0x00472b33 mov rax, qword [rbx] | rax = *(rbx); 0x00472b36 mov rdi, rbx | rdi = rbx; 0x00472b39 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472b3c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472b3f je 0x472b00 | goto label_9; | } 0x00472b41 jmp 0x472b02 | goto label_8; | label_26: 0x00472b43 mov r14d, dword [rsp + 4] | r14d = *((rsp + 4)); | label_24: 0x00472b48 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) <= 0) { 0x00472b4d jle 0x472bb2 | goto label_19; | } 0x00472b4f cmp r14d, 0x20 | 0x00472b53 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); | if (r14d != 0x20) { 0x00472b58 jne 0x472bb7 | goto label_20; | } 0x00472b5a movzx ebp, byte [rsp + 0x14] | ebp = *((rsp + 0x14)); 0x00472b5f inc r15d | r15d++; 0x00472b62 jmp 0x472b7b | | while (rbx == 0) { | label_11: 0x00472b70 xor ebx, ebx | ebx = 0; | label_10: 0x00472b72 dec r15d | r15d--; 0x00472b75 cmp r15d, 1 | | if (r15d <= 1) { 0x00472b79 jle 0x472bb7 | goto label_20; | } 0x00472b7b test rbx, rbx | 0x00472b7e je 0x472b70 | | } 0x00472b80 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00472b84 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00472b88 je 0x472ba0 | 0x00472b8a lea rcx, [rax + 1] | rcx = rax + 1; 0x00472b8e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00472b92 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x00472b96 mov byte [rax], cl | *(rax) = cl; 0x00472b98 jmp 0x472b72 | goto label_10; | } 0x00472ba0 mov rax, qword [rbx] | rax = *(rbx); 0x00472ba3 mov rdi, rbx | rdi = rbx; 0x00472ba6 mov esi, ebp | esi = ebp; 0x00472ba8 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472bab cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472bae je 0x472b70 | goto label_11; | } 0x00472bb0 jmp 0x472b72 | goto label_10; | label_19: 0x00472bb2 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); | label_20: 0x00472bb7 mov rax, qword [r12] | rax = *(r12); 0x00472bbb mov rdi, r12 | rdi = r12; 0x00472bbe mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00472bc3 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00472bc6 mov rax, rbx | rax = rbx; 0x00472bc9 add rsp, 0x88 | 0x00472bd0 pop rbx | 0x00472bd1 pop r12 | 0x00472bd3 pop r13 | 0x00472bd5 pop r14 | 0x00472bd7 pop r15 | 0x00472bd9 pop rbp | 0x00472bda ret | return rax; | }