; assembly | /* r2dec pseudo code output */ | /* balber_berutil.t/none @ 0x4720c0 */ | #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_ch; | int64_t var_10h; | uint32_t var_18h; | int64_t var_1ch; | int64_t var_20h; | int64_t var_28h; | int64_t var_30h; | int32_t var_3ch; | 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_Type32) const */ 0x004720c0 push rbp | 0x004720c1 push r15 | 0x004720c3 push r14 | 0x004720c5 push r13 | 0x004720c7 push r12 | 0x004720c9 push rbx | 0x004720ca sub rsp, 0x88 | 0x004720d1 mov dword [rsp + 0x18], r8d | *((rsp + 0x18)) = r8d; 0x004720d6 mov dword [rsp + 0x1c], ecx | *((rsp + 0x1c)) = ecx; 0x004720da mov rbx, rsi | rbx = rsi; 0x004720dd mov r12, qword [rdx + 0x10] | r12 = *((rdx + 0x10)); 0x004720e1 cmp r12, 0x65 | 0x004720e5 mov r13d, 0x65 | r13d = 0x65; | if (r12 < 0x65) { 0x004720eb cmovl r13, r12 | r13 = r12; | } 0x004720ef mov r15d, dword [rdx + 0x18] | r15d = *((rdx + 0x18)); 0x004720f3 mov dword [rsp + 0x50], r13d | *((rsp + 0x50)) = r13d; 0x004720f8 mov qword [rsp + 0x54], 2 | *((rsp + 0x54)) = 2; 0x00472101 mov qword [rsp + 0x60], 0x50a7ac | *((rsp + 0x60)) = 0x50a7ac; 0x0047210a mov qword [rsp + 0x68], 0x50a579 | *((rsp + 0x68)) = 0x50a579; 0x00472113 mov qword [rsp + 0x70], 0x50a578 | *((rsp + 0x70)) = "snan"; 0x0047211c mov word [rsp + 0x78], 0x652e | *((rsp + 0x78)) = 0x652e; 0x00472123 mov dword [rsp + 0x7c], 2 | *((rsp + 0x7c)) = 2; 0x0047212b mov qword [rsp + 0x28], rdx | *((rsp + 0x28)) = rdx; 0x00472130 mov eax, dword [rdx + 8] | eax = *((rdx + 8)); 0x00472133 test eax, 0x104 | | if ((eax & 0x104) != 0) { 0x00472138 je 0x472148 | 0x0047213a xor ecx, ecx | ecx = 0; 0x0047213c test eax, 0x100 | 0x00472141 sete cl | cl = ((eax & 0x100) == 0) ? 1 : 0; 0x00472144 mov dword [rsp + 0x54], ecx | *((rsp + 0x54)) = ecx; | } 0x00472148 test eax, 0x800 | | if ((eax & 0x800) != 0) { 0x0047214d je 0x472157 | 0x0047214f mov dword [rsp + 0x58], 1 | *((rsp + 0x58)) = 1; | } 0x00472157 mov ecx, eax | ecx = eax; 0x00472159 shr ecx, 0xa | ecx >>= 0xa; 0x0047215c and cl, 1 | cl &= 1; 0x0047215f mov byte [rsp + 0x7a], cl | *((rsp + 0x7a)) = cl; 0x00472163 test eax, 0x4000 | | if ((eax & 0x4000) != 0) { 0x00472168 je 0x47218a | 0x0047216a mov qword [rsp + 0x60], 0x50a57d | *((rsp + 0x60)) = 0x50a57d; 0x00472173 mov qword [rsp + 0x68], 0x50a582 | *((rsp + 0x68)) = 0x50a582; 0x0047217c mov qword [rsp + 0x70], 0x50a581 | *((rsp + 0x70)) = "SNAN"; 0x00472185 mov byte [rsp + 0x79], 0x45 | *((rsp + 0x79)) = 0x45; | } 0x0047218a mov rdi, qword [rip + 0x4e8247] | rdi = BloombergLP::bslma::Default::s_defaultAllocator; 0x00472191 test rdi, rdi | | if (rdi == 0) { 0x00472194 jne 0x47219e | 0x00472196 call 0x4b9f60 | rax = BloombergLP::bslma::Default::determineAndReturnDefaultAllocator() (); 0x0047219b mov rdi, rax | rdi = rax; | } 0x0047219e mov rax, qword [rdi] | rax = *(rdi); 0x004721a1 mov esi, 0xc8 | esi = 0xc8; 0x004721a6 mov qword [rsp + 0x30], rdi | *((rsp + 0x30)) = rdi; 0x004721ab call qword [rax + 0x10] | rax = uint64_t (*rax + 0x10)() (); 0x004721ae mov rbp, rax | 0x004721b1 lea rcx, [rsp + 0x50] | 0x004721b6 mov rdi, rax | rdi = rax; 0x004721b9 mov esi, 0xc8 | 0x004721be mov edx, dword [rsp + 0x18] | 0x004721c2 mov qword [rsp + 0x20], rax | *((rsp + 0x20)) = rax; 0x004721c7 call 0x477650 | eax = BloombergLP::bdldfp::DecimalImpUtil::format(char*,int,BloombergLP::bdldfp::DecimalImpUtil_IntelDfp::ValueType32,BloombergLP::bdldfp::DecimalFormatConfigconst&) (rdi, 0xc8, *((rsp + 0x18)), rsp + 0x50); 0x004721cc mov r14d, eax | r14d = eax; 0x004721cf lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x004721d4 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x004721d9 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x004721de mov eax, r12d | eax = r12d; 0x004721e1 mov qword [rsp + 0x80], r13 | *((rsp + 0x80)) = r13; 0x004721e9 sub eax, r13d | eax -= r13d; 0x004721ec mov ebp, eax | 0x004721ee mov r13d, r14d | r13d = r14d; 0x004721f1 movsxd r14, r14d | r14 = (int64_t) r14d; 0x004721f4 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x004721f9 call 0x404be0 | std::_1::locale::~locale() (); 0x004721fe sub r15d, ebp | r15d -= ebp; 0x00472201 mov eax, r15d | eax = r15d; 0x00472204 xor r15d, r15d | r15d = 0; 0x00472207 sub eax, r14d | eax -= r14d; 0x0047220a mov dword [rsp + 0x3c], eax | *((rsp + 0x3c)) = eax; 0x0047220e cmovns r15d, eax | __asm ("cmovns r15d, eax"); 0x00472212 mov eax, r15d | eax = r15d; 0x00472215 or eax, ebp | eax |= ebp; | if (eax == 0) { 0x00472217 je 0x472317 | goto label_12; | } 0x0047221d mov dword [rsp + 0xc], r13d | *((rsp + 0xc)) = r13d; 0x00472222 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472227 lea r13, [rax + r14] | r13 = rax + r14; 0x0047222b mov qword [rsp + 0x40], r13 | *((rsp + 0x40)) = r13; 0x00472230 mov dword [rsp + 0x4c], ebp | *((rsp + 0x4c)) = ebp; 0x00472234 test ebp, ebp | | if (ebp == 0) { 0x00472236 je 0x4722b3 | goto label_13; | } 0x00472238 mov rax, qword [rsp + 0x28] | rax = *((rsp + 0x28)); 0x0047223d test byte [rax + 9], 1 | 0x00472241 mov r13, qword [rsp + 0x40] | r13 = *((rsp + 0x40)); | if ((*((rax + 9)) & 1) == 0) { 0x00472246 je 0x4722b3 | goto label_13; | } 0x00472248 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0047224d mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x00472252 call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00472257 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0047225c mov esi, 0x95a110 | esi = std::__1::ctype::id; 0x00472261 call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472266 movsx esi, byte [rsp + 0x79] | esi = *((rsp + 0x79)); 0x0047226b mov rcx, qword [rax] | rcx = *(rax); 0x0047226e mov rdi, rax | rdi = rax; 0x00472271 call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x00472274 mov ebp, eax | 0x00472276 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x0047227b call 0x404be0 | std::_1::locale::~locale() (); 0x00472280 mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); 0x00472285 cmp dword [rsp + 0xc], 0 | | if (*((rsp + 0xc)) == 0) { 0x0047228a je 0x4722b3 | goto label_13; | } 0x0047228c mov r13, qword [rsp + 0x20] | r13 = *((rsp + 0x20)); 0x00472291 nop word cs:[rax + rax] | 0x0047229b nop dword [rax + rax] | | do { 0x004722a0 cmp byte [r13], bpl | | if (*(r13) == bpl) { 0x004722a4 je 0x4722b3 | goto label_13; | } 0x004722a6 inc r13 | r13++; 0x004722a9 dec r14 | r14--; 0x004722ac jne 0x4722a0 | | } while (r14 != 0); 0x004722ae mov r13, qword [rsp + 0x40] | r13 = *((rsp + 0x40)); | label_13: 0x004722b3 cmp dword [rsp + 0x18], 0 | 0x004722b8 setns al | __asm ("setns al"); 0x004722bb cmp dword [rsp + 0x58], 1 | 0x004722c0 setne cl | cl = (*((rsp + 0x58)) != 1) ? 1 : 0; 0x004722c3 mov r14d, 0xb0 | r14d = 0xb0; 0x004722c9 mov rdx, qword [rsp + 0x28] | rdx = *((rsp + 0x28)); 0x004722ce and r14d, dword [rdx + 8] | r14d &= *((rdx + 8)); 0x004722d2 test al, cl | | if ((al & cl) != 0) { 0x004722d4 jne 0x472383 | goto label_14; | } 0x004722da cmp r14d, 0x10 | 0x004722de mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); | if (r14d != 0x10) { 0x004722e3 jne 0x47238a | goto label_15; | } 0x004722e9 mov rbp, rax | 0x004722ec inc rbp | rbp++; 0x004722ef test rbx, rbx | | if (rbx == 0) { 0x004722f2 je 0x47238f | goto label_16; | } 0x004722f8 mov al, byte [rax] | al = *(rax); 0x004722fa mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x004722fe cmp rcx, qword [rbx + 0x38] | | if (rcx == *((rbx + 0x38))) { 0x00472302 je 0x472393 | goto label_17; | } 0x00472308 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0047230c mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472310 mov byte [rcx], al | *(rcx) = al; 0x00472312 jmp 0x4723a8 | goto label_18; | label_12: 0x00472317 test r13d, r13d | | if (r13d == 0) { 0x0047231a je 0x4725f2 | goto label_19; | } 0x00472320 xor ebp, ebp | ebp = 0; 0x00472322 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); 0x00472327 jmp 0x47233e | | while (rbx == 0) { | label_1: 0x00472330 xor ebx, ebx | ebx = 0; | label_0: 0x00472332 inc rbp | rbp++; 0x00472335 cmp r14, rbp | | if (r14 == rbp) { 0x00472338 je 0x4725f7 | goto label_20; | } 0x0047233e test rbx, rbx | 0x00472341 je 0x472330 | | } 0x00472343 mov rax, qword [rsp + 0x20] | rax = *((rsp + 0x20)); 0x00472348 movzx eax, byte [rax + rbp] | eax = *((rax + rbp)); 0x0047234c mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472350 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x00472354 je 0x472370 | 0x00472356 lea rdx, [rcx + 1] | rdx = rcx + 1; 0x0047235a mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x0047235e mov byte [rcx], al | *(rcx) = al; 0x00472360 jmp 0x472332 | goto label_0; | } 0x00472370 movzx esi, al | esi = (int32_t) al; 0x00472373 mov rax, qword [rbx] | rax = *(rbx); 0x00472376 mov rdi, rbx | rdi = rbx; 0x00472379 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047237c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047237f je 0x472330 | goto label_1; | } 0x00472381 jmp 0x472332 | goto label_0; | label_14: 0x00472383 mov rbp, qword [rsp + 0x20] | rbp = *((rsp + 0x20)); 0x00472388 jmp 0x4723a8 | goto label_18; | label_15: 0x0047238a mov rbp, rax | 0x0047238d jmp 0x4723a8 | goto label_18; | label_16: 0x0047238f xor ebx, ebx | ebx = 0; 0x00472391 jmp 0x4723a8 | goto label_18; | label_17: 0x00472393 movzx esi, al | esi = (int32_t) al; 0x00472396 mov rax, qword [rbx] | rax = *(rbx); 0x00472399 mov rdi, rbx | rdi = rbx; 0x0047239c call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047239f xor ecx, ecx | ecx = 0; 0x004723a1 cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x004723a4 cmove rbx, rcx | rbx = rcx; | } | label_18: 0x004723a8 cmp dword [rsp + 0x3c], 0 | 0x004723ad mov dword [rsp + 0xc], r14d | *((rsp + 0xc)) = r14d; | if (*((rsp + 0x3c)) <= 0) { 0x004723b2 jle 0x472414 | goto label_21; | } 0x004723b4 cmp r14d, 0x20 | | if (r14d == 0x20) { 0x004723b8 je 0x472414 | goto label_21; | } 0x004723ba movzx eax, byte [rsp + 0x1c] | eax = *((rsp + 0x1c)); 0x004723bf mov dword [rsp + 0x18], eax | *((rsp + 0x18)) = eax; 0x004723c3 lea r14d, [r15 + 1] | r14d = r15 + 1; 0x004723c7 jmp 0x4723db | | while (rbx == 0) { | label_3: 0x004723d0 xor ebx, ebx | ebx = 0; | label_2: 0x004723d2 dec r14d | r14d--; 0x004723d5 cmp r14d, 1 | | if (r14d <= 1) { 0x004723d9 jle 0x472414 | goto label_21; | } 0x004723db test rbx, rbx | 0x004723de je 0x4723d0 | | } 0x004723e0 mov rax, qword [rbx + 0x30] | rax = *((rbx + 0x30)); 0x004723e4 cmp rax, qword [rbx + 0x38] | | if (rax != *((rbx + 0x38))) { 0x004723e8 je 0x472400 | 0x004723ea lea rcx, [rax + 1] | rcx = rax + 1; 0x004723ee mov qword [rbx + 0x30], rcx | *((rbx + 0x30)) = rcx; 0x004723f2 mov ecx, dword [rsp + 0x1c] | ecx = *((rsp + 0x1c)); 0x004723f6 mov byte [rax], cl | *(rax) = cl; 0x004723f8 jmp 0x4723d2 | goto label_2; | } 0x00472400 mov rax, qword [rbx] | rax = *(rbx); 0x00472403 mov rdi, rbx | rdi = rbx; 0x00472406 mov esi, dword [rsp + 0x18] | esi = *((rsp + 0x18)); 0x0047240a call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047240d cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x00472410 je 0x4723d0 | goto label_3; | } 0x00472412 jmp 0x4723d2 | goto label_2; | label_21: 0x00472414 cmp rbp, r13 | | if (rbp == r13) { 0x00472417 je 0x472463 | goto label_22; | } 0x00472419 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); 0x0047241e jmp 0x47242a | | while (rbx == 0) { | label_5: 0x00472420 xor ebx, ebx | ebx = 0; | label_4: 0x00472422 inc rbp | rbp++; 0x00472425 cmp r13, rbp | | if (r13 == rbp) { 0x00472428 je 0x472468 | goto label_23; | } 0x0047242a test rbx, rbx | 0x0047242d je 0x472420 | | } 0x0047242f movzx eax, byte [rbp] | eax = *(rbp); 0x00472433 mov rcx, qword [rbx + 0x30] | rcx = *((rbx + 0x30)); 0x00472437 cmp rcx, qword [rbx + 0x38] | | if (rcx != *((rbx + 0x38))) { 0x0047243b je 0x472450 | 0x0047243d lea rdx, [rcx + 1] | rdx = rcx + 1; 0x00472441 mov qword [rbx + 0x30], rdx | *((rbx + 0x30)) = rdx; 0x00472445 mov byte [rcx], al | *(rcx) = al; 0x00472447 jmp 0x472422 | goto label_4; | } 0x00472450 movzx esi, al | esi = (int32_t) al; 0x00472453 mov rax, qword [rbx] | rax = *(rbx); 0x00472456 mov rdi, rbx | rdi = rbx; 0x00472459 call qword [rax + 0x68] | eax = uint64_t (*rax + 0x68)() (); 0x0047245c cmp eax, 0xffffffff | | if (eax == 0xffffffff) { 0x0047245f je 0x472420 | goto label_5; | } 0x00472461 jmp 0x472422 | goto label_4; | label_22: 0x00472463 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | label_23: 0x00472468 mov ebp, dword [rsp + 0x4c] | ebp = *((rsp + 0x4c)); 0x0047246c test ebp, ebp | | if (ebp == 0) { 0x0047246e je 0x472588 | goto label_24; | } 0x00472474 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472479 mov rsi, qword [rsp + 0x28] | rsi = *((rsp + 0x28)); 0x0047247e call 0x404a70 | std::_1::ios_base::getloc()const (); 0x00472483 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x00472488 mov esi, 0x95a110 | esi = std::__1::ctype::id; 0x0047248d call 0x404b60 | rax = std::_1::locale::use_facet(std::_1::locale::id&)const (); 0x00472492 mov rcx, qword [rax] | rcx = *(rax); 0x00472495 mov rdi, rax | rdi = rax; 0x00472498 mov esi, 0x30 | esi = 0x30; 0x0047249d call qword [rcx + 0x38] | eax = uint64_t (*rcx + 0x38)() (); 0x004724a0 mov r14d, eax | r14d = eax; 0x004724a3 lea rdi, [rsp + 0x10] | rdi = rsp + 0x10; 0x004724a8 call 0x404be0 | std::_1::locale::~locale() (); 0x004724ad test ebp, ebp | | if (ebp <= 0) { 0x004724af jle 0x472512 | goto label_25; | } 0x004724b1 movzx ebp, r14b | ebp = (int32_t) r14b; 0x004724b5 sub r12d, dword [rsp + 0x80] | r12d -= *((rsp + 0x80)); 0x004724bd inc r12d | r12d++; 0x004724c0 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 + 0x40] | rbp = *((rsp + 0x40)); 0x00472517 cmp r13, rbp | | if (r13 == rbp) { 0x0047251a je 0x472583 | goto label_26; | } 0x0047251c mov eax, 0x100 | eax = 0x100; 0x00472521 mov rcx, qword [rsp + 0x28] | rcx = *((rsp + 0x28)); 0x00472526 and eax, dword [rcx + 8] | eax &= *((rcx + 8)); 0x00472529 mov r14d, dword [rsp + 0xc] | r14d = *((rsp + 0xc)); | 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 + 0xc] | r14d = *((rsp + 0xc)); | label_24: 0x00472588 cmp dword [rsp + 0x3c], 0 | | if (*((rsp + 0x3c)) <= 0) { 0x0047258d jle 0x4725f2 | goto label_19; | } 0x0047258f cmp r14d, 0x20 | 0x00472593 mov r12, qword [rsp + 0x30] | r12 = *((rsp + 0x30)); | if (r14d != 0x20) { 0x00472598 jne 0x4725f7 | goto label_20; | } 0x0047259a movzx ebp, byte [rsp + 0x1c] | ebp = *((rsp + 0x1c)); 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 + 0x1c] | ecx = *((rsp + 0x1c)); 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 + 0x30] | r12 = *((rsp + 0x30)); | label_20: 0x004725f7 mov rax, qword [r12] | rax = *(r12); 0x004725fb mov rdi, r12 | rdi = r12; 0x004725fe mov rsi, qword [rsp + 0x20] | rsi = *((rsp + 0x20)); 0x00472603 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); 0x00472606 mov rax, rbx | rax = rbx; 0x00472609 add rsp, 0x88 | 0x00472610 pop rbx | 0x00472611 pop r12 | 0x00472613 pop r13 | 0x00472615 pop r14 | 0x00472617 pop r15 | 0x00472619 pop rbp | 0x0047261a ret | return rax; | }