; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/assume @ 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 () | 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_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_14h; | int64_t var_18h; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | signed int64_t var_34h; | uint32_t var_38h; | int64_t var_40h; | 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; | 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, 0x78 | 0x00472c4e mov qword [rsp + 0x38], r9 | *((rsp + 0x38)) = r9; 0x00472c53 mov r14, r8 | r14 = r8; 0x00472c56 mov dword [rsp + 0x14], ecx | *((rsp + 0x14)) = ecx; 0x00472c5a mov rbx, rsi | rbx = rsi; 0x00472c5d mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x00472c61 cmp r12, 0x1820 | 0x00472c68 mov ecx, r12d | ecx = r12d; 0x00472c6b mov eax, 0x1820 | eax = 0x1820; 0x00472c70 mov dword [rsp + 0x10], r12d | *((rsp + 0x10)) = r12d; | if (r12 < 0x1820) { 0x00472c75 cmovl eax, r12d | eax = r12d; | } 0x00472c79 mov r15d, dword [rdx + 0x18] | r15d = *((rdx + 0x18)); 0x00472c7d mov dword [rsp + 0x30], eax | *((rsp + 0x30)) = eax; 0x00472c81 mov dword [rsp + 0x48], eax | *((rsp + 0x48)) = eax; 0x00472c85 mov qword [rsp + 0x4c], 2 | *((rsp + 0x4c)) = 2; 0x00472c8e mov qword [rsp + 0x58], 0x50a13c | *((rsp + 0x58)) = 0x50a13c; 0x00472c97 mov qword [rsp + 0x60], 0x509f09 | *((rsp + 0x60)) = 0x509f09; 0x00472ca0 mov qword [rsp + 0x68], 0x509f08 | *((rsp + 0x68)) = "snan"; 0x00472ca9 mov word [rsp + 0x70], 0x652e | *((rsp + 0x70)) = 0x652e; 0x00472cb0 mov dword [rsp + 0x74], 2 | *((rsp + 0x74)) = 2; 0x00472cb8 mov qword [rsp + 0x20], rdx | *((rsp + 0x20)) = rdx; 0x00472cbd mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x00472cc0 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x00472cc5 je 0x472cd5 | 0x00472cc7 xor ecx, ecx | ecx = 0; 0x00472cc9 test eax, 0x100 | 0x00472cce sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00472cd1 mov dword [rsp + 0x4c], ecx | *((rsp + 0x4c)) = ecx; | } 0x00472cd5 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x00472cda je 0x472ce4 | 0x00472cdc mov dword [rsp + 0x50], 1 | *((rsp + 0x50)) = 1; | } 0x00472ce4 mov ecx, eax | ecx = eax; 0x00472ce6 shr ecx, 0xa | ecx >>= 0xa; 0x00472ce9 and cl, 1 | cl &= 1; 0x00472cec mov byte [rsp + 0x72], cl | *((rsp + 0x72)) = cl; 0x00472cf0 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x00472cf5 je 0x472d17 | 0x00472cf7 mov qword [rsp + 0x58], 0x509f0d | *((rsp + 0x58)) = 0x509f0d; 0x00472d00 mov qword [rsp + 0x60], 0x509f12 | *((rsp + 0x60)) = 0x509f12; 0x00472d09 mov qword [rsp + 0x68], 0x509f11 | *((rsp + 0x68)) = "SNAN"; 0x00472d12 mov byte [rsp + 0x71], 0x45 | *((rsp + 0x71)) = 0x45; | } 0x00472d17 mov rbp, qword [rip + 0x4e66ba] | rbp = BloombergLP::bslma::Default::s_defaultAllocator; 0x00472d1e test rbp, rbp | | if (rbp == 0) { 0x00472d21 jne 0x472d2b | 0x00472d23 call 0x4b9920 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x00472d28 mov rbp, rax | | } 0x00472d2b mov rax, qword [rbp] | rax = *(rbp); 0x00472d2f mov esi, 0x3023 | esi = 0x3023; 0x00472d34 mov rdi, rbp | rdi = rbp; 0x00472d37 call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x00472d3a mov r13, rax | r13 = rax; 0x00472d3d lea r8, [rsp + 0x48] | 0x00472d42 mov rdi, rax | rdi = rax; 0x00472d45 mov esi, 0x3023 | 0x00472d4a mov rdx, r14 | 0x00472d4d mov rcx, qword [rsp + 0x38] | 0x00472d52 mov qword [rsp + 0x28], rbp | *((rsp + 0x28)) = rbp; 0x00472d57 mov qword [rsp + 0x18], rax | *((rsp + 0x18)) = rax; 0x00472d5c call 0x477a20 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType128,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0x3023, r14, *((rsp + 0x38)), rsp + 0x48); 0x00472d61 mov r14d, eax | r14d = eax; 0x00472d64 mov rdi, rsp | rdi = rsp; 0x00472d67 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00472d6c call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00472d71 mov ebp, dword [rsp + 0x10] | ebp = *((rsp + 0x10)); 0x00472d75 sub ebp, dword [rsp + 0x30] | ebp -= *((rsp + 0x30)); 0x00472d79 mov r13d, r14d | r13d = r14d; 0x00472d7c mov r14d, r14d | 0x00472d7f mov rdi, rsp | rdi = rsp; 0x00472d82 call 0x404b90 | std::_1::locale::~locale() (); 0x00472d87 sub r15d, ebp | r15d -= ebp; 0x00472d8a mov eax, r15d | eax = r15d; 0x00472d8d xor r15d, r15d | r15d = 0; 0x00472d90 sub eax, r13d | eax -= r13d; 0x00472d93 mov dword [rsp + 0x34], eax | *((rsp + 0x34)) = eax; 0x00472d97 cmovns r15d, eax | __asm ("cmovns r15d, eax"); 0x00472d9b mov eax, r15d | eax = r15d; 0x00472d9e or eax, ebp | eax |= ebp; | if (eax == 0) { 0x00472da0 je 0x472ea4 | goto label_13; | } 0x00472da6 mov dword [rsp + 0xc], r13d | *((rsp + 0xc)) = r13d; 0x00472dab mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 0x00472db0 lea rsi, [rax + r14] | rsi = rax + r14; 0x00472db4 mov r13, rsi | r13 = rsi; 0x00472db7 mov dword [rsp + 0x10], ebp | *((rsp + 0x10)) = ebp; 0x00472dbb test ebp, ebp | 0x00472dbd mov qword [rsp + 0x40], rsi | *((rsp + 0x40)) = rsi; | if (ebp == 0) { 0x00472dc2 je 0x472e33 | goto label_14; | } 0x00472dc4 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472dc9 test byte [rax + 9], 1 | 0x00472dcd mov r13, rsi | r13 = rsi; | if ((*((rax + 9)) & 1) == 0) { 0x00472dd0 je 0x472e33 | goto label_14; | } 0x00472dd2 mov rdi, rsp | rdi = rsp; 0x00472dd5 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00472dda call 0x404a20 | std::_1::ios_base::getloc()const (); 0x00472ddf mov rdi, rsp | rdi = rsp; 0x00472de2 mov esi, 0x959110 | esi = std::__1::ctype::id; 0x00472de7 call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472dec movsx esi, byte [rsp + 0x71] | esi = *((rsp + 0x71)); 0x00472df1 mov rcx, qword [rax] | rcx = *(rax); 0x00472df4 mov rdi, rax | rdi = rax; 0x00472df7 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472dfa mov ebp, eax | 0x00472dfc mov rdi, rsp | rdi = rsp; 0x00472dff call 0x404b90 | std::_1::locale::~locale() (); 0x00472e04 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x00472e09 cmp dword [rsp + 0xc], 0 | | if (*((rsp + 0xc)) == 0) { 0x00472e0e je 0x472e33 | goto label_14; | } 0x00472e10 mov r13, qword [rsp + 0x18] | r13 = *((rsp + 0x18)); 0x00472e15 nop word cs:[rax + rax] | 0x00472e1f nop | | do { 0x00472e20 cmp byte [r13], bpl | | if (*(r13) == bpl) { 0x00472e24 je 0x472e33 | goto label_14; | } 0x00472e26 inc r13 | r13++; 0x00472e29 dec r14 | r14--; 0x00472e2c jne 0x472e20 | | } while (r14 != 0); 0x00472e2e mov r13, qword [rsp + 0x40] | r13 = *((rsp + 0x40)); | label_14: 0x00472e33 cmp qword [rsp + 0x38], 0 | 0x00472e39 setns al | __asm ("setns al"); 0x00472e3c cmp dword [rsp + 0x50], 1 | 0x00472e41 setne cl | cl = (*((rsp + 0x50)) != 1) ? 1 : 0; 0x00472e44 mov edi, 0xb0 | edi = 0xb0; 0x00472e49 mov rdx, qword [rsp + 0x20] | rdx = *((rsp + 0x20)); 0x00472e4e and edi, dword [rdx + 8] | edi &= *((rdx + 8)); 0x00472e51 test al, cl | 0x00472e53 mov dword [rsp + 0xc], edi | *((rsp + 0xc)) = edi; | if ((al & cl) != 0) { 0x00472e57 jne 0x472f13 | goto label_15; | } 0x00472e5d cmp edi, 0x10 | 0x00472e60 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); | if (edi != 0x10) { 0x00472e65 jne 0x472f24 | goto label_16; | } 0x00472e6b mov rbp, rax | 0x00472e6e inc rbp | rbp++; 0x00472e71 test rbx, rbx | | if (rbx == 0) { 0x00472e74 je 0x472f33 | goto label_17; | } 0x00472e7a mov al, byte [rax] | al = *(rax); 0x00472e7c mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472e80 cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00472e84 je 0x472f3e | goto label_18; | } 0x00472e8a lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472e8e mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472e92 mov byte [rcx], al | *(rcx) = al; 0x00472e94 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) > 0) { 0x00472e99 jg 0x472f5a | goto label_19; | } 0x00472e9f jmp 0x472fb4 | goto label_20; | label_13: 0x00472ea4 test r13d, r13d | | if (r13d == 0) { 0x00472ea7 je 0x473183 | goto label_21; | } 0x00472ead xor ebp, ebp | ebp = 0; 0x00472eaf mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); 0x00472eb4 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 0x473188 | goto label_22; | } 0x00472ece test rbx, rbx | 0x00472ed1 je 0x472ec0 | | } 0x00472ed3 mov rax, qword [rsp + 0x18] | rax = *((rsp + 0x18)); 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_15: 0x00472f13 mov rbp, qword [rsp + 0x18] | rbp = *((rsp + 0x18)); 0x00472f18 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) <= 0) { 0x00472f1d jg 0x472f5a | 0x00472f1f jmp 0x472fb4 | goto label_20; | label_16: 0x00472f24 mov rbp, rax | 0x00472f27 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) > 0) { 0x00472f2c jg 0x472f5a | goto label_19; | } 0x00472f2e jmp 0x472fb4 | goto label_20; | label_17: 0x00472f33 xor ebx, ebx | ebx = 0; 0x00472f35 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) > 0) { 0x00472f3a jg 0x472f5a | goto label_19; | } 0x00472f3c jmp 0x472fb4 | goto label_20; | label_18: 0x00472f3e movzx esi, al | esi = (int32_t) al; 0x00472f41 mov rax, qword [rbx] | rax = *(rbx); 0x00472f44 mov rdi, rbx | rdi = rbx; 0x00472f47 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472f4a xor ecx, ecx | ecx = 0; 0x00472f4c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472f4f cmove rbx, rcx | rbx = rcx; | } 0x00472f53 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) <= 0) { 0x00472f58 jle 0x472fb4 | goto label_20; | } | } | label_19: 0x00472f5a cmp dword [rsp + 0xc], 0x20 | | if (*((rsp + 0xc)) == 0x20) { 0x00472f5f je 0x472fb4 | goto label_20; | } 0x00472f61 movzx eax, byte [rsp + 0x14] | eax = *((rsp + 0x14)); 0x00472f66 mov dword [rsp + 0x38], eax | *((rsp + 0x38)) = eax; 0x00472f6a lea r14d, [r15 + 1] | r14d = r15 + 1; 0x00472f6e jmp 0x472f7b | | while (rbx == 0) { | label_3: 0x00472f70 xor ebx, ebx | ebx = 0; | label_2: 0x00472f72 dec r14d | r14d--; 0x00472f75 cmp r14d, 1 | | if (r14d <= 1) { 0x00472f79 jle 0x472fb4 | goto label_20; | } 0x00472f7b test rbx, rbx | 0x00472f7e je 0x472f70 | | } 0x00472f80 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00472f84 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00472f88 je 0x472fa0 | 0x00472f8a lea rcx, [rax + 1] | rcx = rax + 1; 0x00472f8e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00472f92 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x00472f96 mov byte [rax], cl | *(rax) = cl; 0x00472f98 jmp 0x472f72 | goto label_2; | } 0x00472fa0 mov rax, qword [rbx] | rax = *(rbx); 0x00472fa3 mov rdi, rbx | rdi = rbx; 0x00472fa6 mov esi, dword [rsp + 0x38] | esi = *((rsp + 0x38)); 0x00472faa call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472fad cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472fb0 je 0x472f70 | goto label_3; | } 0x00472fb2 jmp 0x472f72 | goto label_2; | label_20: 0x00472fb4 cmp rbp, r13 | | if (rbp == r13) { 0x00472fb7 je 0x473003 | goto label_23; | } 0x00472fb9 mov r14d, dword [rsp + 0x10] | r14d = *((rsp + 0x10)); 0x00472fbe jmp 0x472fca | | while (rbx == 0) { | label_5: 0x00472fc0 xor ebx, ebx | ebx = 0; | label_4: 0x00472fc2 inc rbp | rbp++; 0x00472fc5 cmp r13, rbp | | if (r13 == rbp) { 0x00472fc8 je 0x473008 | goto label_24; | } 0x00472fca test rbx, rbx | 0x00472fcd je 0x472fc0 | | } 0x00472fcf movzx eax, byte [rbp] | eax = *(rbp); 0x00472fd3 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472fd7 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472fdb je 0x472ff0 | 0x00472fdd lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472fe1 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472fe5 mov byte [rcx], al | *(rcx) = al; 0x00472fe7 jmp 0x472fc2 | goto label_4; | } 0x00472ff0 movzx esi, al | esi = (int32_t) al; 0x00472ff3 mov rax, qword [rbx] | rax = *(rbx); 0x00472ff6 mov rdi, rbx | rdi = rbx; 0x00472ff9 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x00472ffc cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472fff je 0x472fc0 | goto label_5; | } 0x00473001 jmp 0x472fc2 | goto label_4; | label_23: 0x00473003 mov r14d, dword [rsp + 0x10] | r14d = *((rsp + 0x10)); | label_24: 0x00473008 test r14d, r14d | | if (r14d == 0) { 0x0047300b je 0x4730c0 | goto label_10; | } 0x00473011 mov rdi, rsp | rdi = rsp; 0x00473014 mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00473019 call 0x404a20 | std::_1::ios_base::getloc()const (); 0x0047301e mov rdi, rsp | rdi = rsp; 0x00473021 mov esi, 0x959110 | esi = std::__1::ctype::id; 0x00473026 call 0x404b10 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x0047302b mov rcx, qword [rax] | rcx = *(rax); 0x0047302e mov rdi, rax | rdi = rax; 0x00473031 mov esi, 0x30 | esi = 0x30; 0x00473036 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00473039 mov ebp, eax | 0x0047303b mov rdi, rsp | rdi = rsp; 0x0047303e call 0x404b90 | std::_1::locale::~locale() (); 0x00473043 test r14d, r14d | | if (r14d <= 0) { 0x00473046 jle 0x4730a3 | goto label_25; | } 0x00473048 movzx r14d, bpl | r14d = (int32_t) bpl; 0x0047304c sub r12d, dword [rsp + 0x30] | r12d -= *((rsp + 0x30)); 0x00473051 inc r12d | r12d++; 0x00473054 jmp 0x47306b | | while (rbx == 0) { | label_7: 0x00473060 xor ebx, ebx | ebx = 0; | label_6: 0x00473062 dec r12d | r12d--; 0x00473065 cmp r12d, 1 | | if (r12d <= 1) { 0x00473069 jle 0x4730a3 | goto label_25; | } 0x0047306b test rbx, rbx | 0x0047306e je 0x473060 | | } 0x00473070 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473074 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x00473078 je 0x473090 | 0x0047307a lea rcx, [rax + 1] | rcx = rax + 1; 0x0047307e mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473082 mov byte [rax], bpl | *(rax) = bpl; 0x00473085 jmp 0x473062 | goto label_6; | } 0x00473090 mov rax, qword [rbx] | rax = *(rbx); 0x00473093 mov rdi, rbx | rdi = rbx; 0x00473096 mov esi, r14d | esi = r14d; 0x00473099 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047309c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047309f je 0x473060 | goto label_7; | } 0x004730a1 jmp 0x473062 | goto label_6; | label_25: 0x004730a3 mov rbp, qword [rsp + 0x40] | rbp = *((rsp + 0x40)); 0x004730a8 cmp r13, rbp | | if (r13 != rbp) { 0x004730ab je 0x4730c0 | 0x004730ad mov eax, 0x100 | eax = 0x100; 0x004730b2 mov rcx, qword [rsp + 0x20] | rcx = *((rsp + 0x20)); 0x004730b7 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); | if (eax != 0) { 0x004730ba jne 0x47314e | goto label_26; | } | } | label_10: 0x004730c0 cmp dword [rsp + 0x34], 0 | | if (*((rsp + 0x34)) <= 0) { 0x004730c5 jle 0x473183 | goto label_21; | } 0x004730cb cmp dword [rsp + 0xc], 0x20 | 0x004730d0 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); | if (*((rsp + 0xc)) != 0x20) { 0x004730d5 jne 0x473188 | goto label_22; | } 0x004730db movzx ebp, byte [rsp + 0x14] | ebp = *((rsp + 0x14)); 0x004730e0 inc r15d | r15d++; 0x004730e3 jmp 0x4730ff | | while (rbx == 0) { | label_9: 0x004730f0 xor ebx, ebx | ebx = 0; | label_8: 0x004730f2 dec r15d | r15d--; 0x004730f5 cmp r15d, 1 | | if (r15d <= 1) { 0x004730f9 jle 0x473188 | goto label_22; | } 0x004730ff test rbx, rbx | 0x00473102 je 0x4730f0 | | } 0x00473104 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x00473108 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x0047310c je 0x473120 | 0x0047310e lea rcx, [rax + 1] | rcx = rax + 1; 0x00473112 mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x00473116 mov ecx, dword [rsp + 0x14] | ecx = *((rsp + 0x14)); 0x0047311a mov byte [rax], cl | *(rax) = cl; 0x0047311c jmp 0x4730f2 | goto label_8; | } 0x00473120 mov rax, qword [rbx] | rax = *(rbx); 0x00473123 mov rdi, rbx | rdi = rbx; 0x00473126 mov esi, ebp | esi = ebp; 0x00473128 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047312b cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047312e je 0x4730f0 | goto label_9; | } 0x00473130 jmp 0x4730f2 | goto label_8; | label_11: 0x00473140 xor ebx, ebx | ebx = 0; | label_12: 0x00473142 inc r13 | r13++; 0x00473145 cmp rbp, r13 | | if (rbp == r13) { 0x00473148 je 0x4730c0 | goto label_10; | } | label_26: 0x0047314e test rbx, rbx | | if (rbx == 0) { 0x00473151 je 0x473140 | goto label_11; | } 0x00473153 movzx eax, byte [r13] | eax = *(r13); 0x00473158 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x0047315c cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00473160 je 0x473170 | 0x00473162 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00473166 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047316a mov byte [rcx], al | *(rcx) = al; 0x0047316c jmp 0x473142 | goto label_12; | } 0x00473170 movzx esi, al | esi = (int32_t) al; 0x00473173 mov rax, qword [rbx] | rax = *(rbx); 0x00473176 mov rdi, rbx | rdi = rbx; 0x00473179 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047317c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047317f je 0x473140 | goto label_11; | } 0x00473181 jmp 0x473142 | goto label_12; | label_21: 0x00473183 mov r12, qword [rsp + 0x28] | r12 = *((rsp + 0x28)); | label_22: 0x00473188 mov rax, qword [r12] | rax = *(r12); 0x0047318c mov rdi, r12 | rdi = r12; 0x0047318f mov rsi, qword [rsp + 0x18] | rsi = *((rsp + 0x18)); 0x00473194 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00473197 mov rax, rbx | rax = rbx; 0x0047319a add rsp, 0x78 | 0x0047319e pop rbx | 0x0047319f pop r12 | 0x004731a1 pop r13 | 0x004731a3 pop r14 | 0x004731a5 pop r15 | 0x004731a7 pop rbp | 0x004731a8 ret | return rax; | }