; assembly | /* r2dec pseudo code output */ | /* balst_stacktraceresolverimpl_elf.t/assume @ 0x404d90 */ | #include | ; (fcn) sym.stuffRandomAddresses_BloombergLP::balst::StackTrace_ () | uint64_t stuffRandomAddresses_BloombergLP::balst::StackTrace_ (int64_t arg1) { | rdi = arg1; | /* stuffRandomAddresses(BloombergLP::balst::StackTrace*) */ 0x00404d90 push rbp | 0x00404d91 push r15 | 0x00404d93 push r14 | 0x00404d95 push r12 | 0x00404d97 push rbx | 0x00404d98 mov r14, rdi | r14 = rdi; 0x00404d9b movabs r15, 0xff00000000000000 | r15 = 0xff00000000000000; 0x00404da5 movabs r12, 0x100000000000000 | r12 = 0x100000000000000; 0x00404daf add rdi, 0x38 | rdi += 0x38; 0x00404db3 mov esi, 0x1100 | 0x00404db8 call 0x407bc0 | eax = bsl::vector>::resize(unsigned long) (rdi, 0x1100); 0x00404dbd mov rcx, 0xffffffffffffffff | rcx = 0xffffffffffffffff; 0x00404dc4 xor edx, edx | edx = 0; 0x00404dc6 xor eax, eax | eax = 0; 0x00404dc8 xor ebx, ebx | ebx = 0; 0x00404dca nop word [rax + rax] | | do { 0x00404dd0 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404dd4 mov qword [rsi + rbx], rcx | *((rsi + rbx)) = rcx; 0x00404dd8 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404ddc mov qword [rsi + rbx + 0xd8], rdx | *((rsi + rbx + 0xd8)) = rdx; 0x00404de4 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404de8 lea rdi, [rdx + 1] | rdi = rdx + 1; 0x00404dec mov qword [rsi + rbx + 0x1b0], rdi | *((rsi + rbx + 0x1b0)) = rdi; 0x00404df4 add rcx, r12 | rcx += r12; 0x00404df7 add rbx, 0x288 | rbx += 0x288; 0x00404dfe add eax, 0xfffffffd | eax += 0xfffffffd; 0x00404e01 add rdx, r15 | rdx += r15; 0x00404e04 cmp eax, 0xfffffd00 | 0x00404e09 jne 0x404dd0 | | } while (eax != 0xfffffd00); 0x00404e0b mov ecx, 0x100 | ecx = 0x100; 0x00404e10 xor edx, edx | edx = 0; 0x00404e12 xor esi, esi | esi = 0; 0x00404e14 nop word cs:[rax + rax] | 0x00404e1e nop | | do { 0x00404e20 mov rdi, qword [r14 + 0x38] | rdi = *((r14 + 0x38)); 0x00404e24 mov qword [rdi + rbx], rsi | *((rdi + rbx)) = rsi; 0x00404e28 mov rdi, qword [r14 + 0x38] | rdi = *((r14 + 0x38)); 0x00404e2c lea rbp, [rdx - 1] | rbp = rdx - 1; 0x00404e30 mov qword [rdi + rbx + 0xd8], rbp | *((rdi + rbx + 0xd8)) = rbp; 0x00404e38 mov rdi, qword [r14 + 0x38] | rdi = *((r14 + 0x38)); 0x00404e3c mov qword [rdi + rbx + 0x1b0], rdx | *((rdi + rbx + 0x1b0)) = rdx; 0x00404e44 add rsi, r12 | rsi += r12; 0x00404e47 add rbx, 0x288 | rbx += 0x288; 0x00404e4e add eax, 0xfffffffd | eax += 0xfffffffd; 0x00404e51 add rdx, r15 | rdx += r15; 0x00404e54 dec ecx | ecx--; 0x00404e56 jne 0x404e20 | | } while (ecx != 0); 0x00404e58 mov ebp, 0xfffffffd | 0x00404e5d sub ebp, eax | ebp -= eax; 0x00404e5f mov eax, 1 | eax = 1; 0x00404e64 mov ecx, 0x100 | ecx = 0x100; 0x00404e69 mov rdx, 0xffffffffffffffff | rdx = 0xffffffffffffffff; | do { 0x00404e70 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404e74 mov qword [rsi + rbx], rax | *((rsi + rbx)) = rax; 0x00404e78 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404e7c lea rdi, [rdx - 1] | rdi = rdx - 1; 0x00404e80 mov qword [rsi + rbx + 0xd8], rdi | *((rsi + rbx + 0xd8)) = rdi; 0x00404e88 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404e8c mov qword [rsi + rbx + 0x1b0], rdx | *((rsi + rbx + 0x1b0)) = rdx; 0x00404e94 add rax, r12 | rax += r12; 0x00404e97 add rbx, 0x288 | rbx += 0x288; 0x00404e9e add ebp, 3 | ebp += 3; 0x00404ea1 add rdx, r15 | rdx += r15; 0x00404ea4 dec ecx | ecx--; 0x00404ea6 jne 0x404e70 | | } while (ecx != 0); 0x00404ea8 xor edi, edi | edi = 0; 0x00404eaa cmp ebp, 0x8fd | 0x00404eb0 setne dil | dil = (ebp != 0x8fd) ? 1 : 0; 0x00404eb4 mov esi, 0x43c990 | esi = "vecLength - 2048 == vIndex"; 0x00404eb9 mov edx, 0x12c | edx = 0x12c; 0x00404ebe call 0x404f60 | (anonymousnamespace)::aSsErT(bool,char const*,int) (); 0x00404ec3 cmp ebp, 0x10fd | | if (ebp >= 0x10fd) { 0x00404ec9 jae 0x404f4b | goto label_0; | } 0x00404ecf movabs rax, 0x5851f42d4c957f2d | rax = 0x5851f42d4c957f2d; 0x00404ed9 movabs rdx, 0x14057b7ef767814f | rdx = 0x14057b7ef767814f; 0x00404ee3 mov rcx, qword [rip + 0x26bf56] | rcx = bigRandSeed; 0x00404eea nop word [rax + rax] | | do { 0x00404ef0 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404ef4 imul rcx, rax | rcx *= rax; 0x00404ef8 add rcx, rdx | rcx += rdx; 0x00404efb mov rdi, rcx | rdi = rcx; 0x00404efe shr rdi, 0x20 | rdi >>= 0x20; 0x00404f02 imul rcx, rax | rcx *= rax; 0x00404f06 add rcx, rdx | rcx += rdx; 0x00404f09 xor rdi, rcx | rdi ^= rcx; 0x00404f0c mov qword [rsi + rbx], rdi | *((rsi + rbx)) = rdi; 0x00404f10 mov rsi, qword [r14 + 0x38] | rsi = *((r14 + 0x38)); 0x00404f14 imul rcx, rax | rcx *= rax; 0x00404f18 add rcx, rdx | rcx += rdx; 0x00404f1b mov rdi, rcx | rdi = rcx; 0x00404f1e shr rdi, 0x20 | rdi >>= 0x20; 0x00404f22 imul rcx, rax | rcx *= rax; 0x00404f26 add rcx, rdx | rcx += rdx; 0x00404f29 xor rdi, rcx | rdi ^= rcx; 0x00404f2c mov qword [rsi + rbx + 0xd8], rdi | *((rsi + rbx + 0xd8)) = rdi; 0x00404f34 add rbx, 0x1b0 | rbx += 0x1b0; 0x00404f3b cmp rbx, 0xe5800 | 0x00404f42 jne 0x404ef0 | | } while (rbx != 0xe5800); 0x00404f44 mov qword [rip + 0x26bef5], rcx | *(obj.bigRandSeed) = rcx; | label_0: 0x00404f4b pop rbx | 0x00404f4c pop r12 | 0x00404f4e pop r14 | 0x00404f50 pop r15 | 0x00404f52 pop rbp | 0x00404f53 ret | return rax; | }