; assembly | /* r2dec pseudo code output */ | /* balb_testmessages.t/assume @ 0x40f990 */ | #include | ; (fcn) method.BloombergLP::balb::Sequence1.Sequence1__ () | int64_t method_BloombergLP::balb::Sequence1_Sequence1_ (int64_t arg1) { | int64_t var_8h; | rdi = arg1; | /* BloombergLP::balb::Sequence1::~Sequence1() */ 0x0040f990 push r15 | 0x0040f992 push r14 | 0x0040f994 push r13 | 0x0040f996 push r12 | 0x0040f998 push rbx | 0x0040f999 sub rsp, 0x10 | 0x0040f99d mov r14, rdi | r14 = rdi; 0x0040f9a0 mov rbx, qword [rdi + 0x1f8] | rbx = *((rdi + 0x1f8)); 0x0040f9a7 test rbx, rbx | | if (rbx != 0) { 0x0040f9aa je 0x40fa11 | 0x0040f9ac mov r15, qword [r14] | r15 = *(r14); 0x0040f9af mov eax, dword [rbx + 0x30] | eax = *((rbx + 0x30)); 0x0040f9b2 cmp rax, 3 | | if (rax <= 3) { 0x0040f9b6 ja 0x40f9fe | | /* switch table (4 cases) at 0x446860 */ 0x0040f9b8 jmp qword [rax*8 + 0x446860] | 0x0040f9bf cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x0040f9c4 je 0x40f9d3 | 0x0040f9c6 mov rsi, qword [rbx] | rsi = *(rbx); 0x0040f9c9 mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x0040f9cd mov rax, qword [rdi] | rax = *(rdi); 0x0040f9d0 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040f9d3 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; 0x0040f9db jmp 0x40f9fe | goto label_1; 0x0040f9dd mov r12, qword [rbx] | r12 = *(rbx); 0x0040f9e0 test r12, r12 | | if (r12 == 0) { 0x0040f9e3 je 0x40f9fe | goto label_1; | } 0x0040f9e5 mov r13, qword [rbx + 0x38] | r13 = *((rbx + 0x38)); 0x0040f9e9 mov rdi, r12 | 0x0040f9ec call 0x4155f0 | BloombergLP::balb::Choice1::~Choice1() (r12); 0x0040f9f1 mov rax, qword [r13] | rax = *(r13); 0x0040f9f5 mov rdi, r13 | rdi = r13; 0x0040f9f8 mov rsi, r12 | rsi = r12; 0x0040f9fb call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } | label_1: 0x0040f9fe mov dword [rbx + 0x30], 0xffffffff | *((rbx + 0x30)) = 0xffffffff; 0x0040fa05 mov rax, qword [r15] | rax = *(r15); 0x0040fa08 mov rdi, r15 | rdi = r15; 0x0040fa0b mov rsi, rbx | rsi = rbx; 0x0040fa0e call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040fa11 cmp byte [r14 + 0x1e8], 0 | | if (*((r14 + 0x1e8)) != 0) { 0x0040fa19 je 0x40fa73 | 0x0040fa1b mov byte [r14 + 0x1e8], 0 | *((r14 + 0x1e8)) = 0; 0x0040fa23 mov eax, dword [r14 + 0x1d8] | eax = *((r14 + 0x1d8)); 0x0040fa2a cmp rax, 3 | | if (rax <= 3) { 0x0040fa2e ja 0x40fa68 | | /* switch table (4 cases) at 0x446880 */ 0x0040fa30 jmp qword [rax*8 + 0x446880] | 0x0040fa37 lea rdi, [r14 + 0x68] | 0x0040fa3b call 0x409400 | BloombergLP::balb::Sequence6::~Sequence6() (r14 + 0x68); 0x0040fa40 jmp 0x40fa68 | goto label_2; 0x0040fa42 cmp qword [r14 + 0x88], 0x17 | | if (*((r14 + 0x88)) != 0x17) { 0x0040fa4a je 0x40fa5d | 0x0040fa4c mov rsi, qword [r14 + 0x68] | rsi = *((r14 + 0x68)); 0x0040fa50 mov rdi, qword [r14 + 0x90] | rdi = *((r14 + 0x90)); 0x0040fa57 mov rax, qword [rdi] | rax = *(rdi); 0x0040fa5a call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040fa5d mov qword [r14 + 0x80], 0xffffffffffffffff | *((r14 + 0x80)) = 0xffffffffffffffff; | } | label_2: 0x0040fa68 mov dword [r14 + 0x1d8], 0xffffffff | *((r14 + 0x1d8)) = 0xffffffff; | } 0x0040fa73 mov rdi, qword [r14 + 0x48] | rdi = *((r14 + 0x48)); 0x0040fa77 test rdi, rdi | | if (rdi != 0) { 0x0040fa7a je 0x40faa1 | 0x0040fa7c mov rsi, qword [r14 + 0x50] | 0x0040fa80 mov rax, qword [r14 + 0x60] | rax = *((r14 + 0x60)); 0x0040fa84 mov qword [rsp + 8], rax | *((rsp + 8)) = rax; 0x0040fa89 lea rdx, [rsp + 8] | rdx = rsp + 8; 0x0040fa8e call 0x419cc0 | voidBloombergLP::bslalg::ArrayDestructionPrimitives::destroy>(BloombergLP::balb::Choice1*,BloombergLP::balb::Choice1*,bsl::allocator,bsl::integral_constant) (rdi, *((r14 + 0x50))); 0x0040fa93 mov rsi, qword [r14 + 0x48] | rsi = *((r14 + 0x48)); 0x0040fa97 mov rdi, qword [r14 + 0x60] | rdi = *((r14 + 0x60)); 0x0040fa9b mov rax, qword [rdi] | rax = *(rdi); 0x0040fa9e call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040faa1 mov rbx, qword [r14 + 0x28] | rbx = *((r14 + 0x28)); 0x0040faa5 test rbx, rbx | | if (rbx == 0) { 0x0040faa8 je 0x40fb20 | goto label_3; | } 0x0040faaa mov r15, qword [r14 + 0x30] | r15 = *((r14 + 0x30)); 0x0040faae cmp rbx, r15 | | if (rbx != r15) { 0x0040fab1 jne 0x40fade | goto label_4; | } 0x0040fab3 jmp 0x40fb13 | goto label_5; 0x0040fac0 mov rdi, rbx | 0x0040fac3 call 0x409400 | BloombergLP::balb::Sequence6::~Sequence6() (rbx); | do { | label_0: 0x0040fac8 mov dword [rbx + 0x170], 0xffffffff | *((rbx + 0x170)) = 0xffffffff; 0x0040fad2 add rbx, 0x180 | rbx += 0x180; 0x0040fad9 cmp r15, rbx | | if (r15 == rbx) { 0x0040fadc je 0x40fb0f | goto label_6; | } | label_4: 0x0040fade mov eax, dword [rbx + 0x170] | eax = *((rbx + 0x170)); 0x0040fae4 cmp rax, 3 | 0x0040fae8 ja 0x40fac8 | | } while (rax > 3); | /* switch table (4 cases) at 0x4468a0 */ 0x0040faea jmp qword [rax*8 + 0x4468a0] | 0x0040faf1 cmp qword [rbx + 0x20], 0x17 | | if (*((rbx + 0x20)) != 0x17) { 0x0040faf6 je 0x40fb05 | 0x0040faf8 mov rsi, qword [rbx] | rsi = *(rbx); 0x0040fafb mov rdi, qword [rbx + 0x28] | rdi = *((rbx + 0x28)); 0x0040faff mov rax, qword [rdi] | rax = *(rdi); 0x0040fb02 call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | } 0x0040fb05 mov qword [rbx + 0x18], 0xffffffffffffffff | *((rbx + 0x18)) = 0xffffffffffffffff; 0x0040fb0d jmp 0x40fac8 | goto label_0; | label_6: 0x0040fb0f mov rbx, qword [r14 + 0x28] | rbx = *((r14 + 0x28)); | label_5: 0x0040fb13 mov rdi, qword [r14 + 0x40] | rdi = *((r14 + 0x40)); 0x0040fb17 mov rax, qword [rdi] | rax = *(rdi); 0x0040fb1a mov rsi, rbx | rsi = rbx; 0x0040fb1d call qword [rax + 0x18] | rax = uint64_t (*rax + 0x18)() (); | label_3: 0x0040fb20 mov rbx, qword [r14 + 8] | rbx = *((r14 + 8)); 0x0040fb24 test rbx, rbx | | if (rbx == 0) { 0x0040fb27 je 0x40fb62 | goto label_7; | } 0x0040fb29 mov r15, qword [r14 + 0x10] | r15 = *((r14 + 0x10)); 0x0040fb2d cmp rbx, r15 | | if (rbx == r15) { 0x0040fb30 je 0x40fb55 | goto label_8; | } 0x0040fb32 nop word cs:[rax + rax] | 0x0040fb3c nop dword [rax] | | do { 0x0040fb40 mov rdi, rbx | 0x0040fb43 call 0x4154f0 | BloombergLP::bslstl::Optional_DataImp::reset() (rbx); 0x0040fb48 add rbx, 0x28 | rbx += 0x28; 0x0040fb4c cmp r15, rbx | 0x0040fb4f jne 0x40fb40 | | } while (r15 != rbx); 0x0040fb51 mov rbx, qword [r14 + 8] | rbx = *((r14 + 8)); | label_8: 0x0040fb55 mov rdi, qword [r14 + 0x20] | rdi = *((r14 + 0x20)); 0x0040fb59 mov rax, qword [rdi] | rax = *(rdi); 0x0040fb5c mov rsi, rbx | rsi = rbx; 0x0040fb5f call qword [rax + 0x18] | uint64_t (*rax + 0x18)() (); | label_7: 0x0040fb62 add rsp, 0x10 | 0x0040fb66 pop rbx | 0x0040fb67 pop r12 | 0x0040fb69 pop r13 | 0x0040fb6b pop r14 | 0x0040fb6d pop r15 | 0x0040fb6f ret | return rax; | }