; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x472c40 */ | #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_Type128__std::__1::ostreambuf_i () | int64_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_Type128_std::_1::ostreambuf_i (uint32_t arg6, int64_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_38h; | int32_t var_3ch; | uint32_t var_40h; | int64_t var_48h; | int64_t var_50h; | 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; | r9 = arg6; | 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_Type128) const */ 0x00472c40 push rbp | 0x00472c41 push r15 | 0x00472c43 push r14 | 0x00472c45 push r13 | 0x00472c47 push r12 | 0x00472c49 push rbx | 0x00472c4a sub rsp, 0x88 | 0x00472c51 mov qword [rsp + 0x40], r9 | *((rsp + 0x40)) = r9; 0x00472c56 mov r14, r8 | r14 = r8; 0x00472c59 mov dword [rsp + 0x1c], ecx | *((rsp + 0x1c)) = ecx; 0x00472c5d mov rbx, rsi | rbx = rsi; 0x00472c60 mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x00472c64 cmp r12, 0x1820 | 0x00472c6b mov eax, 0x1820 | eax = 0x1820; | if (r12 < 0x1820) { 0x00472c70 cmovl rax, r12 | rax = r12; | } 0x00472c74 mov r15d, dword [rdx + 0x18] | r15d = *((rdx + 0x18)); 0x00472c78 mov qword [rsp + 0x50], rax | *((rsp + 0x50)) = rax; 0x00472c7d mov dword [rsp + 0x58], eax | *((rsp + 0x58)) = eax; 0x00472c81 mov qword [rsp + 0x5c], 2 | *((rsp + 0x5c)) = 2; 0x00472c8a mov qword [rsp + 0x68], 0x50a7ac | *((rsp + 0x68)) = 0x50a7ac; 0x00472c93 mov qword [rsp + 0x70], 0x50a579 | *((rsp + 0x70)) = 0x50a579; 0x00472c9c mov qword [rsp + 0x78], 0x50a578 | *((rsp + 0x78)) = "snan"; 0x00472ca5 mov word [rsp + 0x80], 0x652e | *((rsp + 0x80)) = 0x652e; 0x00472caf mov dword [rsp + 0x84], 2 | *((rsp + 0x84)) = 2; 0x00472cba mov qword [rsp + 0x28], rdx | *((rsp + 0x28)) = rdx; 0x00472cbf mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x00472cc2 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x00472cc7 je 0x472cd7 | 0x00472cc9 xor ecx, ecx | ecx = 0; 0x00472ccb test eax, 0x100 | 0x00472cd0 sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00472cd3 mov dword [rsp + 0x5c], ecx | *((rsp + 0x5c)) = ecx; | } 0x00472cd7 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x00472cdc je 0x472ce6 | 0x00472cde mov dword [rsp + 0x60], 1 | *((rsp + 0x60)) = 1; | } 0x00472ce6 mov ecx, eax | ecx = eax; 0x00472ce8 shr ecx, 0xa | ecx >>= 0xa; 0x00472ceb and cl, 1 | cl &= 1; 0x00472cee mov byte [rsp + 0x82], cl | *((rsp + 0x82)) = cl; 0x00472cf5 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x00472cfa je 0x472d1f | 0x00472cfc mov qword [rsp + 0x68], 0x50a57d | *((rsp + 0x68)) = 0x50a57d; 0x00472d05 mov qword [rsp + 0x70], 0x50a582 | *((rsp + 0x70)) = 0x50a582; 0x00472d0e mov qword [rsp + 0x78], 0x50a581 | *((rsp + 0x78)) = "SNAN"; 0x00472d17 mov byte [rsp + 0x81], 0x45 | *((rsp + 0x81)) = 0x45; | } 0x00472d1f mov rbp, qword [rip + 0x4e76b2] | rbp = BloombergLP::bslma::Default::s_defaultAllocator; 0x00472d26 test rbp, rbp | | if (rbp == 0) { 0x00472d29 jne 0x472d33 | 0x00472d2b call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00472d30 mov rbp, rax | | } 0x00472d33 mov rax, qword [rbp] | rax = *(rbp); 0x00472d37 mov esi, 0x3023 | esi = 0x3023; 0x00472d3c mov rdi, rbp | rdi = rbp; 0x00472d3f call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00472d42 mov r13, rax | r13 = rax; 0x00472d45 lea r8, [rsp + 0x58] | 0x00472d4a mov rdi, rax | rdi = rax; 0x00472d4d mov esi, 0x3023 | 0x00472d52 mov rdx, r14 | 0x00472d55 mov rcx, qword [rsp + 0x40] | 0x00472d5a mov qword [rsp + 0x30], rbp | *((rsp + 0x30)) = rbp; 0x00472d5f mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x00472d64 call 0x477bf0 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType128,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0x3023, r14, *((rsp + 0x40)), rsp + 0x58); 0x00472d69 mov r14d, eax | r14d = eax; 0x00472d6c lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472d71 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00472d76 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00472d7b mov ebp, r12d | 0x00472d7e sub ebp, dword [rsp + 0x50] | ebp -= *((rsp + 0x50)); 0x00472d82 mov r13d, r14d | r13d = r14d; 0x00472d85 movsxd r14, r14d | r14 = (int64_t) r14d; 0x00472d88 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472d8d call 0x404be0 | std::_1::locale::~locale() (); 0x00472d92 sub r15d, ebp | r15d -= ebp; 0x00472d95 mov eax, r15d | eax = r15d; 0x00472d98 xor r15d, r15d | r15d = 0; 0x00472d9b sub eax, r14d | eax -= r14d; 0x00472d9e mov dword [rsp + 0x3c], eax | *((rsp + 0x3c)) = eax; 0x00472da2 cmovns r15d, eax | __asm ("cmovns r15d, eax"); 0x00472da6 mov eax, r15d | eax = r15d; 0x00472da9 or eax, ebp | eax |= ebp; | if (eax == 0) { 0x00472dab je 0x472ea8 | goto label_12; | } 0x00472db1 mov dword [rsp + 0xc], r13d | *((rsp + 0xc)) = r13d; 0x00472db6 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472dbb lea r13, [rax + r14] | r13 = rax + r14; 0x00472dbf mov qword [rsp + 0x48], r13 | *((rsp + 0x48)) = r13; 0x00472dc4 mov dword [rsp + 0x38], ebp | *((rsp + 0x38)) = ebp; 0x00472dc8 test ebp, ebp | | if (ebp == 0) { 0x00472dca je 0x472e43 | goto label_13; | } 0x00472dcc mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x00472dd1 test byte [rax + 9], 1 | 0x00472dd5 mov r13, qword [rsp + 0x48] | r13 = *((rsp + 0x48)); | if ((*((rax + 9)) & 1) == 0) { 0x00472dda je 0x472e43 | goto label_13; | } 0x00472ddc lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472de1 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00472de6 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00472deb lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472df0 mov esi, 0x95a110 | esi = std::__1::ctype::id; 0x00472df5 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472dfa movsx esi, byte [rsp + 0x81] | esi = *((rsp + 0x81)); 0x00472e02 mov rcx, qword [rax] | rcx = *(rax); 0x00472e05 mov rdi, rax | rdi = rax; 0x00472e08 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472e0b mov ebp, eax | 0x00472e0d lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472e12 call 0x404be0 | std::_1::locale::~locale() (); 0x00472e17 mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); 0x00472e1c cmp dword [rsp + 0xc], 0 | | if (*((rsp + 0xc)) == 0) { 0x00472e21 je 0x472e43 | goto label_13; | } 0x00472e23 mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); 0x00472e28 nop dword [rax + rax] | | do { 0x00472e30 cmp byte [r13], bpl | | if (*(r13) == bpl) { 0x00472e34 je 0x472e43 | goto label_13; | } 0x00472e36 inc r13 | r13++; 0x00472e39 dec r14 | r14--; 0x00472e3c jne 0x472e30 | | } while (r14 != 0); 0x00472e3e mov r13, qword [rsp + 0x48] | r13 = *((rsp + 0x48)); | label_13: 0x00472e43 cmp qword [rsp + 0x40], 0 | 0x00472e49 setns al | __asm ("setns al"); 0x00472e4c cmp dword [rsp + 0x60], 1 | 0x00472e51 setne cl | cl = (*((rsp + 0x60)) != 1) ? 1 : 0; 0x00472e54 mov r14d, 0xb0 | r14d = 0xb0; 0x00472e5a mov rdx, qword [rsp + 0x28] | rdx = *((rsp + 0x28)); 0x00472e5f and r14d, dword [rdx + 8] | r14d &= *((rdx + 8)); 0x00472e63 test al, cl | | if ((al & cl) != 0) { 0x00472e65 jne 0x472f13 | goto label_14; | } 0x00472e6b cmp r14d, 0x10 | 0x00472e6f mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); | if (r14d != 0x10) { 0x00472e74 jne 0x472f1a | goto label_15; | } 0x00472e7a mov rbp, rax | 0x00472e7d inc rbp | rbp++; 0x00472e80 test rbx, rbx | | if (rbx == 0) { 0x00472e83 je 0x472f1f | goto label_16; | } 0x00472e89 mov al, byte [rax] | al = *(rax); 0x00472e8b mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472e8f cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00472e93 je 0x472f23 | goto label_17; | } 0x00472e99 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472e9d mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472ea1 mov byte [rcx], al | *(rcx) = al; 0x00472ea3 jmp 0x472f38 | goto label_18; | label_12: 0x00472ea8 test r13d, r13d | | if (r13d == 0) { 0x00472eab je 0x473172 | goto label_19; | } 0x00472eb1 xor ebp, ebp | ebp = 0; 0x00472eb3 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); 0x00472eb8 jmp 0x472ece | | while (rbx == 0) { | label_1: 0x00472ec0 xor ebx, ebx | ebx = 0; | label_0: 0x00472ec2 inc rbp | rbp++; 0x00472ec5 cmp r14, rbp | | if (r14 == rbp) { 0x00472ec8 je 0x473177 | goto label_20; | } 0x00472ece test rbx, rbx | 0x00472ed1 je 0x472ec0 | | } 0x00472ed3 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472ed8 movzx eax, byte [rax + rbp] | eax = *((rax + rbp)); 0x00472edc mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472ee0 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472ee4 je 0x472f00 | 0x00472ee6 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472eea mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472eee mov byte [rcx], al | *(rcx) = al; 0x00472ef0 jmp 0x472ec2 | goto label_0; | } 0x00472f00 movzx esi, al | esi = (int32_t) al; 0x00472f03 mov rax, qword [rbx] | rax = *(rbx); 0x00472f06 mov rdi, rbx | rdi = rbx; 0x00472f09 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472f0c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472f0f je 0x472ec0 | goto label_1; | } 0x00472f11 jmp 0x472ec2 | goto label_0; | label_14: 0x00472f13 mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x00472f18 jmp 0x472f38 | goto label_18; | label_15: 0x00472f1a mov rbp, rax | 0x00472f1d jmp 0x472f38 | goto label_18; | label_16: 0x00472f1f xor ebx, ebx | ebx = 0; 0x00472f21 jmp 0x472f38 | goto label_18; | label_17: 0x00472f23 movzx esi, al | esi = (int32_t) al; 0x00472f26 mov rax, qword [rbx] | rax = *(rbx); 0x00472f29 mov rdi, rbx | rdi = rbx; 0x00472f2c call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472f2f xor ecx, ecx | ecx = 0; 0x00472f31 cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472f34 cmove rbx, rcx | rbx = rcx; | } | label_18: 0x00472f38 cmp dword [rsp + 0x3c], 0 | 0x00472f3d mov dword [rsp + 0xc], r14d | *((rsp + 0xc)) = r14d; | if (*((rsp + 0x3c)) <= 0) { 0x00472f42 jle 0x472fa4 | goto label_21; | } 0x00472f44 cmp r14d, 0x20 | | if (r14d == 0x20) { 0x00472f48 je 0x472fa4 | goto label_21; | } 0x00472f4a movzx eax, byte [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x00472f4f mov dword [rsp + 0x40], eax | *((rsp + 0x40)) = eax; 0x00472f53 lea r14d, [r15 + 1] | r14d = r15 + 1; 0x00472f57 jmp 0x472f6b | | while (rbx == 0) { | label_3: 0x00472f60 xor ebx, ebx | ebx = 0; | label_2: 0x00472f62 dec r14d | r14d--; 0x00472f65 cmp r14d, 1 | | if (r14d <= 1) { 0x00472f69 jle 0x472fa4 | goto label_21; | } 0x00472f6b test rbx, rbx | 0x00472f6e je 0x472f60 | | } 0x00472f70 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00472f74 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00472f78 je 0x472f90 | 0x00472f7a lea rcx, [rax + 1] | rcx = rax + 1; 0x00472f7e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00472f82 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x00472f86 mov byte [rax], cl | *(rax) = cl; 0x00472f88 jmp 0x472f62 | goto label_2; | } 0x00472f90 mov rax, qword [rbx] | rax = *(rbx); 0x00472f93 mov rdi, rbx | rdi = rbx; 0x00472f96 mov esi, dword [rsp + 0x40] | esi = *((rsp + 0x40)); 0x00472f9a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472f9d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472fa0 je 0x472f60 | goto label_3; | } 0x00472fa2 jmp 0x472f62 | goto label_2; | label_21: 0x00472fa4 cmp rbp, r13 | | if (rbp == r13) { 0x00472fa7 je 0x472ff3 | goto label_22; | } 0x00472fa9 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); 0x00472fae jmp 0x472fba | | while (rbx == 0) { | label_5: 0x00472fb0 xor ebx, ebx | ebx = 0; | label_4: 0x00472fb2 inc rbp | rbp++; 0x00472fb5 cmp r13, rbp | | if (r13 == rbp) { 0x00472fb8 je 0x472ff8 | goto label_23; | } 0x00472fba test rbx, rbx | 0x00472fbd je 0x472fb0 | | } 0x00472fbf movzx eax, byte [rbp] | eax = *(rbp); 0x00472fc3 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472fc7 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472fcb je 0x472fe0 | 0x00472fcd lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472fd1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472fd5 mov byte [rcx], al | *(rcx) = al; 0x00472fd7 jmp 0x472fb2 | goto label_4; | } 0x00472fe0 movzx esi, al | esi = (int32_t) al; 0x00472fe3 mov rax, qword [rbx] | rax = *(rbx); 0x00472fe6 mov rdi, rbx | rdi = rbx; 0x00472fe9 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472fec cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472fef je 0x472fb0 | goto label_5; | } 0x00472ff1 jmp 0x472fb2 | goto label_4; | label_22: 0x00472ff3 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | label_23: 0x00472ff8 cmp dword [rsp + 0x38], 0 | | if (*((rsp + 0x38)) == 0) { 0x00472ffd je 0x473108 | goto label_24; | } 0x00473003 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00473008 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x0047300d call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00473012 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00473017 mov esi, 0x95a110 | esi = std::__1::ctype::id; 0x0047301c call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00473021 mov rcx, qword [rax] | rcx = *(rax); 0x00473024 mov rdi, rax | rdi = rax; 0x00473027 mov esi, 0x30 | esi = 0x30; 0x0047302c call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x0047302f mov ebp, eax | 0x00473031 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00473036 call 0x404be0 | std::_1::locale::~locale() (); 0x0047303b cmp dword [rsp + 0x38], 0 | | if (*((rsp + 0x38)) <= 0) { 0x00473040 jle 0x473093 | goto label_25; | } 0x00473042 movzx r14d, bpl | r14d = (int32_t) bpl; 0x00473046 sub r12d, dword [rsp + 0x50] | r12d -= *((rsp + 0x50)); 0x0047304b inc r12d | r12d++; 0x0047304e jmp 0x47305b | | while (rbx == 0) { | label_7: 0x00473050 xor ebx, ebx | ebx = 0; | label_6: 0x00473052 dec r12d | r12d--; 0x00473055 cmp r12d, 1 | | if (r12d <= 1) { 0x00473059 jle 0x473093 | goto label_25; | } 0x0047305b test rbx, rbx | 0x0047305e je 0x473050 | | } 0x00473060 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473064 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473068 je 0x473080 | 0x0047306a lea rcx, [rax + 1] | rcx = rax + 1; 0x0047306e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473072 mov byte [rax], bpl | *(rax) = bpl; 0x00473075 jmp 0x473052 | goto label_6; | } 0x00473080 mov rax, qword [rbx] | rax = *(rbx); 0x00473083 mov rdi, rbx | rdi = rbx; 0x00473086 mov esi, r14d | esi = r14d; 0x00473089 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047308c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047308f je 0x473050 | goto label_7; | } 0x00473091 jmp 0x473052 | goto label_6; | label_25: 0x00473093 mov rbp, qword [rsp + 0x48] | rbp = *((rsp + 0x48)); 0x00473098 cmp r13, rbp | | if (r13 == rbp) { 0x0047309b je 0x473103 | goto label_26; | } 0x0047309d mov eax, 0x100 | eax = 0x100; 0x004730a2 mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); 0x004730a7 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); 0x004730aa mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | if (eax != 0) { 0x004730af jne 0x4730ca | goto label_27; | } 0x004730b1 jmp 0x473108 | goto label_24; | do { | label_9: 0x004730c0 xor ebx, ebx | ebx = 0; | label_8: 0x004730c2 inc r13 | r13++; 0x004730c5 cmp rbp, r13 | | if (rbp == r13) { 0x004730c8 je 0x473108 | goto label_24; | } | label_27: 0x004730ca test rbx, rbx | 0x004730cd je 0x4730c0 | | } while (rbx == 0); 0x004730cf movzx eax, byte [r13] | eax = *(r13); 0x004730d4 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004730d8 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x004730dc je 0x4730f0 | 0x004730de lea rdx, [rcx + 1] | rdx = rcx + 1; 0x004730e2 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x004730e6 mov byte [rcx], al | *(rcx) = al; 0x004730e8 jmp 0x4730c2 | goto label_8; | } 0x004730f0 movzx esi, al | esi = (int32_t) al; 0x004730f3 mov rax, qword [rbx] | rax = *(rbx); 0x004730f6 mov rdi, rbx | rdi = rbx; 0x004730f9 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x004730fc cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004730ff je 0x4730c0 | goto label_9; | } 0x00473101 jmp 0x4730c2 | goto label_8; | label_26: 0x00473103 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | label_24: 0x00473108 cmp dword [rsp + 0x3c], 0 | | if (*((rsp + 0x3c)) <= 0) { 0x0047310d jle 0x473172 | goto label_19; | } 0x0047310f cmp r14d, 0x20 | 0x00473113 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); | if (r14d != 0x20) { 0x00473118 jne 0x473177 | goto label_20; | } 0x0047311a movzx ebp, byte [rsp + 0x1c] | ebp = *((rsp + 0x1c)); 0x0047311f inc r15d | r15d++; 0x00473122 jmp 0x47313b | | while (rbx == 0) { | label_11: 0x00473130 xor ebx, ebx | ebx = 0; | label_10: 0x00473132 dec r15d | r15d--; 0x00473135 cmp r15d, 1 | | if (r15d <= 1) { 0x00473139 jle 0x473177 | goto label_20; | } 0x0047313b test rbx, rbx | 0x0047313e je 0x473130 | | } 0x00473140 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473144 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473148 je 0x473160 | 0x0047314a lea rcx, [rax + 1] | rcx = rax + 1; 0x0047314e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473152 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x00473156 mov byte [rax], cl | *(rax) = cl; 0x00473158 jmp 0x473132 | goto label_10; | } 0x00473160 mov rax, qword [rbx] | rax = *(rbx); 0x00473163 mov rdi, rbx | rdi = rbx; 0x00473166 mov esi, ebp | esi = ebp; 0x00473168 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047316b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047316e je 0x473130 | goto label_11; | } 0x00473170 jmp 0x473132 | goto label_10; | label_19: 0x00473172 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); | label_20: 0x00473177 mov rax, qword [r12] | rax = *(r12); 0x0047317b mov rdi, r12 | rdi = r12; 0x0047317e mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00473183 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473186 mov rax, rbx | rax = rbx; 0x00473189 add rsp, 0x88 | 0x00473190 pop rbx | 0x00473191 pop r12 | 0x00473193 pop r13 | 0x00473195 pop r14 | 0x00473197 pop r15 | 0x00473199 pop rbp | 0x0047319a ret | return rax; | }