; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 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_ch; | int64_t var_10h; | int64_t var_1ch; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int32_t var_3ch; | uint32_t var_40h; | int64_t var_48h; | int64_t var_50h; | uint32_t var_54h; | int64_t var_58h; | int64_t var_5ch; | uint32_t var_60h; | int64_t var_68h; | int64_t var_70h; | char * var_78h; | int64_t var_80h; | int64_t var_81h; | int64_t var_82h; | int64_t var_84h; | 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 + 0x40], r8 | *((rsp + 0x40)) = r8; 0x00472696 mov dword [rsp + 0x1c], ecx | *((rsp + 0x1c)) = ecx; 0x0047269a mov rbx, rsi | rbx = rsi; 0x0047269d mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x004726a1 cmp r12, 0x18e | 0x004726a8 mov eax, r12d | eax = r12d; 0x004726ab mov r13d, 0x18e | r13d = 0x18e; 0x004726b1 mov r14d, r12d | r14d = r12d; | if (r12 < 0x18e) { 0x004726b4 cmovl r13d, r12d | r13d = r12d; | } 0x004726b8 mov r15d, dword [rdx + 0x18] | r15d = *((rdx + 0x18)); 0x004726bc mov dword [rsp + 0x58], r13d | *((rsp + 0x58)) = r13d; 0x004726c1 mov qword [rsp + 0x5c], 2 | *((rsp + 0x5c)) = 2; 0x004726ca mov qword [rsp + 0x68], 0x50a13c | *((rsp + 0x68)) = 0x50a13c; 0x004726d3 mov qword [rsp + 0x70], 0x509f09 | *((rsp + 0x70)) = 0x509f09; 0x004726dc mov qword [rsp + 0x78], 0x509f08 | *((rsp + 0x78)) = "snan"; 0x004726e5 mov word [rsp + 0x80], 0x652e | *((rsp + 0x80)) = 0x652e; 0x004726ef mov dword [rsp + 0x84], 2 | *((rsp + 0x84)) = 2; 0x004726fa mov qword [rsp + 0x28], rdx | *((rsp + 0x28)) = rdx; 0x004726ff mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x00472702 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x00472707 je 0x472717 | 0x00472709 xor ecx, ecx | ecx = 0; 0x0047270b test eax, 0x100 | 0x00472710 sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00472713 mov dword [rsp + 0x5c], ecx | *((rsp + 0x5c)) = ecx; | } 0x00472717 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x0047271c je 0x472726 | 0x0047271e mov dword [rsp + 0x60], 1 | *((rsp + 0x60)) = 1; | } 0x00472726 mov ecx, eax | ecx = eax; 0x00472728 shr ecx, 0xa | ecx >>= 0xa; 0x0047272b and cl, 1 | cl &= 1; 0x0047272e mov byte [rsp + 0x82], cl | *((rsp + 0x82)) = cl; 0x00472735 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x0047273a je 0x47275f | 0x0047273c mov qword [rsp + 0x68], 0x509f0d | *((rsp + 0x68)) = 0x509f0d; 0x00472745 mov qword [rsp + 0x70], 0x509f12 | *((rsp + 0x70)) = 0x509f12; 0x0047274e mov qword [rsp + 0x78], 0x509f11 | *((rsp + 0x78)) = "SNAN"; 0x00472757 mov byte [rsp + 0x81], 0x45 | *((rsp + 0x81)) = 0x45; | } 0x0047275f mov rbp, qword [rip + 0x4e6c72] | rbp = BloombergLP::bslma::Default::s_defaultAllocator; 0x00472766 test rbp, rbp | | if (rbp == 0) { 0x00472769 jne 0x472773 | 0x0047276b call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00472770 mov rbp, rax | | } 0x00472773 mov rax, qword [rbp] | rax = *(rbp); 0x00472777 mov esi, 0x311 | esi = 0x311; 0x0047277c mov rdi, rbp | rdi = rbp; 0x0047277f call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00472782 lea rcx, [rsp + 0x58] | 0x00472787 mov rdi, rax | rdi = rax; 0x0047278a mov esi, 0x311 | 0x0047278f mov rdx, qword [rsp + 0x40] | 0x00472794 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00472799 mov qword [rsp + 0x30], rbp | *((rsp + 0x30)) = rbp; 0x0047279e call 0x4777b0 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType64,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0x311, *((rsp + 0x40)), rsp + 0x58); 0x004727a3 mov dword [rsp + 0xc], eax | *((rsp + 0xc)) = eax; 0x004727a7 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x004727ac mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x004727b1 call 0x404a20 | std::_1::ios_base::getloc()const (); 0x004727b6 mov dword [rsp + 0x50], r13d | *((rsp + 0x50)) = r13d; 0x004727bb sub r14d, r13d | r14d -= r13d; 0x004727be mov ebp, r14d | 0x004727c1 mov r13d, dword [rsp + 0xc] | r13d = *((rsp + 0xc)); 0x004727c6 mov r14d, r13d | r14d = *((rsp + 0xc)); 0x004727c9 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x004727ce call 0x404b90 | std::_1::locale::~locale() (); 0x004727d3 sub r15d, ebp | r15d -= ebp; 0x004727d6 mov eax, r15d | eax = r15d; 0x004727d9 xor r15d, r15d | r15d = 0; 0x004727dc sub eax, r13d | eax -= r13d; 0x004727df mov dword [rsp + 0x3c], eax | *((rsp + 0x3c)) = eax; 0x004727e3 cmovns r15d, eax | __asm ("cmovns r15d, eax"); 0x004727e7 mov eax, r15d | eax = r15d; 0x004727ea or eax, ebp | eax |= ebp; | if (eax == 0) { 0x004727ec je 0x4728eb | goto label_12; | } 0x004727f2 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x004727f7 lea r13, [rsi + r14] | r13 = rsi + r14; 0x004727fb mov qword [rsp + 0x48], r13 | *((rsp + 0x48)) = r13; 0x00472800 test ebp, ebp | 0x00472802 mov dword [rsp + 0x54], ebp | *((rsp + 0x54)) = ebp; | if (ebp == 0) { 0x00472806 je 0x472888 | goto label_13; | } 0x0047280c mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x00472811 test byte [rax + 9], 1 | 0x00472815 mov r13, qword [rsp + 0x48] | r13 = *((rsp + 0x48)); | if ((*((rax + 9)) & 1) == 0) { 0x0047281a je 0x472888 | goto label_13; | } 0x0047281c lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472821 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00472826 call 0x404a20 | std::_1::ios_base::getloc()const (); 0x0047282b lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472830 mov esi, 0x959110 | esi = std::__1::ctype::id; 0x00472835 call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0047283a movsx esi, byte [rsp + 0x81] | esi = *((rsp + 0x81)); 0x00472842 mov rcx, qword [rax] | rcx = *(rax); 0x00472845 mov rdi, rax | rdi = rax; 0x00472848 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0047284b mov ebp, eax | 0x0047284d lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472852 call 0x404b90 | std::_1::locale::~locale() (); 0x00472857 mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); 0x0047285c cmp dword [rsp + 0xc], 0 | | if (*((rsp + 0xc)) == 0) { 0x00472861 je 0x472883 | goto label_14; | } 0x00472863 mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); 0x00472868 nop dword [rax + rax] | | do { 0x00472870 cmp byte [r13], bpl | | if (*(r13) == bpl) { 0x00472874 je 0x472883 | goto label_14; | } 0x00472876 inc r13 | r13++; 0x00472879 dec r14 | r14--; 0x0047287c jne 0x472870 | | } while (r14 != 0); 0x0047287e mov r13, qword [rsp + 0x48] | r13 = *((rsp + 0x48)); | label_14: 0x00472883 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); | label_13: 0x00472888 cmp qword [rsp + 0x40], 0 | 0x0047288e setns al | __asm ("setns al"); 0x00472891 cmp dword [rsp + 0x60], 1 | 0x00472896 setne cl | cl = (*((rsp + 0x60)) != 1) ? 1 : 0; 0x00472899 mov r14d, 0xb0 | r14d = 0xb0; 0x0047289f mov rdx, qword [rsp + 0x28] | rdx = *((rsp + 0x28)); 0x004728a4 and r14d, dword [rdx + 8] | r14d &= *((rdx + 8)); 0x004728a8 test al, cl | | if ((al & cl) != 0) { 0x004728aa jne 0x472953 | goto label_15; | } 0x004728b0 cmp r14d, 0x10 | | if (r14d != 0x10) { 0x004728b4 jne 0x472953 | goto label_15; | } 0x004728ba mov rbp, rsi | 0x004728bd inc rbp | rbp++; 0x004728c0 test rbx, rbx | | if (rbx == 0) { 0x004728c3 je 0x472958 | goto label_16; | } 0x004728c9 mov rax, rsi | rax = rsi; 0x004728cc mov al, byte [rsi] | al = *(rsi); 0x004728ce mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004728d2 cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x004728d6 je 0x47295c | goto label_17; | } 0x004728dc lea rdx, [rcx + 1] | rdx = rcx + 1; 0x004728e0 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004728e4 mov byte [rcx], al | *(rcx) = al; 0x004728e6 jmp 0x472971 | goto label_18; | label_12: 0x004728eb test r13d, r13d | | if (r13d == 0) { 0x004728ee je 0x472bb2 | goto label_19; | } 0x004728f4 xor ebp, ebp | ebp = 0; 0x004728f6 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); 0x004728fb jmp 0x47290e | | while (rbx == 0) { | label_1: 0x00472900 xor ebx, ebx | ebx = 0; | label_0: 0x00472902 inc rbp | rbp++; 0x00472905 cmp r14, rbp | | if (r14 == rbp) { 0x00472908 je 0x472bb7 | goto label_20; | } 0x0047290e test rbx, rbx | 0x00472911 je 0x472900 | | } 0x00472913 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472918 movzx eax, byte [rax + rbp] | eax = *((rax + rbp)); 0x0047291c mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472920 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472924 je 0x472940 | 0x00472926 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0047292a mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047292e mov byte [rcx], al | *(rcx) = al; 0x00472930 jmp 0x472902 | goto label_0; | } 0x00472940 movzx esi, al | esi = (int32_t) al; 0x00472943 mov rax, qword [rbx] | rax = *(rbx); 0x00472946 mov rdi, rbx | rdi = rbx; 0x00472949 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047294c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047294f je 0x472900 | goto label_1; | } 0x00472951 jmp 0x472902 | goto label_0; | label_15: 0x00472953 mov rbp, rsi | 0x00472956 jmp 0x472971 | goto label_18; | label_16: 0x00472958 xor ebx, ebx | ebx = 0; 0x0047295a jmp 0x472971 | goto label_18; | label_17: 0x0047295c movzx esi, al | esi = (int32_t) al; 0x0047295f mov rax, qword [rbx] | rax = *(rbx); 0x00472962 mov rdi, rbx | rdi = rbx; 0x00472965 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472968 xor ecx, ecx | ecx = 0; 0x0047296a cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047296d cmove rbx, rcx | rbx = rcx; | } | label_18: 0x00472971 cmp dword [rsp + 0x3c], 0 | 0x00472976 mov dword [rsp + 0xc], r14d | *((rsp + 0xc)) = r14d; | if (*((rsp + 0x3c)) <= 0) { 0x0047297b jle 0x4729e4 | goto label_21; | } 0x0047297d cmp r14d, 0x20 | | if (r14d == 0x20) { 0x00472981 je 0x4729e4 | goto label_21; | } 0x00472983 movzx eax, byte [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x00472988 mov dword [rsp + 0x40], eax | *((rsp + 0x40)) = eax; 0x0047298c lea r14d, [r15 + 1] | r14d = r15 + 1; 0x00472990 jmp 0x4729ab | | while (rbx == 0) { | label_3: 0x004729a0 xor ebx, ebx | ebx = 0; | label_2: 0x004729a2 dec r14d | r14d--; 0x004729a5 cmp r14d, 1 | | if (r14d <= 1) { 0x004729a9 jle 0x4729e4 | goto label_21; | } 0x004729ab test rbx, rbx | 0x004729ae je 0x4729a0 | | } 0x004729b0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004729b4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004729b8 je 0x4729d0 | 0x004729ba lea rcx, [rax + 1] | rcx = rax + 1; 0x004729be mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x004729c2 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x004729c6 mov byte [rax], cl | *(rax) = cl; 0x004729c8 jmp 0x4729a2 | goto label_2; | } 0x004729d0 mov rax, qword [rbx] | rax = *(rbx); 0x004729d3 mov rdi, rbx | rdi = rbx; 0x004729d6 mov esi, dword [rsp + 0x40] | esi = *((rsp + 0x40)); 0x004729da call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004729dd cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004729e0 je 0x4729a0 | goto label_3; | } 0x004729e2 jmp 0x4729a2 | goto label_2; | label_21: 0x004729e4 cmp rbp, r13 | | if (rbp == r13) { 0x004729e7 je 0x472a33 | goto label_22; | } 0x004729e9 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); 0x004729ee jmp 0x4729fa | | while (rbx == 0) { | label_5: 0x004729f0 xor ebx, ebx | ebx = 0; | label_4: 0x004729f2 inc rbp | rbp++; 0x004729f5 cmp r13, rbp | | if (r13 == rbp) { 0x004729f8 je 0x472a38 | goto label_23; | } 0x004729fa test rbx, rbx | 0x004729fd je 0x4729f0 | | } 0x004729ff movzx eax, byte [rbp] | eax = *(rbp); 0x00472a03 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472a07 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472a0b je 0x472a20 | 0x00472a0d lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472a11 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472a15 mov byte [rcx], al | *(rcx) = al; 0x00472a17 jmp 0x4729f2 | goto label_4; | } 0x00472a20 movzx esi, al | esi = (int32_t) al; 0x00472a23 mov rax, qword [rbx] | rax = *(rbx); 0x00472a26 mov rdi, rbx | rdi = rbx; 0x00472a29 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472a2c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472a2f je 0x4729f0 | goto label_5; | } 0x00472a31 jmp 0x4729f2 | goto label_4; | label_22: 0x00472a33 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | label_23: 0x00472a38 mov ebp, dword [rsp + 0x54] | ebp = *((rsp + 0x54)); 0x00472a3c test ebp, ebp | | if (ebp == 0) { 0x00472a3e je 0x472b48 | goto label_24; | } 0x00472a44 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472a49 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00472a4e call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00472a53 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472a58 mov esi, 0x959110 | esi = std::__1::ctype::id; 0x00472a5d call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472a62 mov rcx, qword [rax] | rcx = *(rax); 0x00472a65 mov rdi, rax | rdi = rax; 0x00472a68 mov esi, 0x30 | esi = 0x30; 0x00472a6d call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472a70 mov r14d, eax | r14d = eax; 0x00472a73 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472a78 call 0x404b90 | std::_1::locale::~locale() (); 0x00472a7d test ebp, ebp | | if (ebp <= 0) { 0x00472a7f jle 0x472ad2 | goto label_25; | } 0x00472a81 movzx ebp, r14b | ebp = (int32_t) r14b; 0x00472a85 sub r12d, dword [rsp + 0x50] | r12d -= *((rsp + 0x50)); 0x00472a8a inc r12d | r12d++; 0x00472a8d 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 + 0x48] | rbp = *((rsp + 0x48)); 0x00472ad7 cmp r13, rbp | | if (r13 == rbp) { 0x00472ada je 0x472b43 | goto label_26; | } 0x00472adc mov eax, 0x100 | eax = 0x100; 0x00472ae1 mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); 0x00472ae6 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); 0x00472ae9 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | 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 + 0xc] | r14d = *((rsp + 0xc)); | label_24: 0x00472b48 cmp dword [rsp + 0x3c], 0 | | if (*((rsp + 0x3c)) <= 0) { 0x00472b4d jle 0x472bb2 | goto label_19; | } 0x00472b4f cmp r14d, 0x20 | 0x00472b53 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); | if (r14d != 0x20) { 0x00472b58 jne 0x472bb7 | goto label_20; | } 0x00472b5a movzx ebp, byte [rsp + 0x1c] | ebp = *((rsp + 0x1c)); 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 + 0x1c] | ecx = *((rsp + 0x1c)); 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 + 0x30] | r12 = *((rsp + 0x30)); | label_20: 0x00472bb7 mov rax, qword [r12] | rax = *(r12); 0x00472bbb mov rdi, r12 | rdi = r12; 0x00472bbe mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 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; | }