; assembly | /* r2dec pseudo code output */ | /* balb_filecleanerutil.t/assume @ 0x412830 */ | #include | ; (fcn) method.BloombergLP::bdls::PathUtil.getRoot_bsl::basic_string_char__std::__1::char_traits_char___bsl::allocator_char_____BloombergLP::bslstl::StringRefImp_char__const__int_ () | int32_t method_BloombergLP::bdls::PathUtil_getRoot_bsl::basic_string_char_std::_1::char_traits_char_bsl::allocator_char_BloombergLP::bslstl::StringRefImp_char_const_int_ (int64_t arg3, int64_t arg2, int64_t arg1) { | rdx = arg3; | rsi = arg2; | rdi = arg1; | /* BloombergLP::bdls::PathUtil::getRoot(bsl::basic_string, bsl::allocator >*, BloombergLP::bslstl::StringRefImp const&, int) */ 0x00412830 push rbp | 0x00412831 push r15 | 0x00412833 push r14 | 0x00412835 push r12 | 0x00412837 push rbx | 0x00412838 mov ebx, edx | ebx = edx; 0x0041283a mov r15, rsi | r15 = rsi; 0x0041283d mov r14, rdi | r14 = rdi; 0x00412840 test edx, edx | 0x00412842 js 0x412868 | | while (*((r12 + rbx)) != 0x2f) { | label_1: 0x00412844 test ebx, ebx | | if (ebx == 0) { 0x00412846 je 0x412894 | goto label_3; | } 0x00412848 xor ebp, ebp | ebp = 0; 0x0041284a mov rdi, r14 | 0x0041284d xor esi, esi | esi = 0; 0x0041284f call 0x41a610 | bsl::basic_string,bsl::allocator>::privateClear(bool) (r14); 0x00412854 mov rsi, qword [r15] | 0x00412857 mov edx, ebx | 0x00412859 mov ecx, 0x43d1dd | 0x0041285e mov rdi, r14 | 0x00412861 call 0x41a250 | bsl::basic_string,bsl::allocator>::privateAppend(char const*,unsigned long,char const*) (r14, *(r15), ebx, "string<...>::append(i,j): string too long"); 0x00412866 jmp 0x412899 | goto label_4; 0x00412868 mov r12, qword [r15] | r12 = *(r15); 0x0041286b mov eax, dword [r15 + 8] | eax = *((r15 + 8)); 0x0041286f test eax, eax | | if (eax < 0) { 0x00412871 js 0x4128a4 | goto label_5; | } 0x00412873 test eax, eax | | if (eax <= 0) { 0x00412875 jle 0x4128b0 | goto label_6; | } | label_2: 0x00412877 mov eax, eax | 0x00412879 xor ebx, ebx | ebx = 0; 0x0041287b nop dword [rax + rax] | | label_0: 0x00412880 cmp byte [r12 + rbx], 0x2f | 0x00412885 jne 0x412844 | | } 0x00412887 inc rbx | rbx++; 0x0041288a cmp rax, rbx | | if (rax != rbx) { 0x0041288d jne 0x412880 | goto label_0; | } 0x0041288f mov rbx, rax | rbx = rax; 0x00412892 jmp 0x412844 | goto label_1; | label_3: 0x00412894 mov ebp, 0xffffffff | | label_4: 0x00412899 mov eax, ebp | eax = 0xffffffff; 0x0041289b pop rbx | 0x0041289c pop r12 | 0x0041289e pop r14 | 0x004128a0 pop r15 | 0x004128a2 pop rbp | 0x004128a3 ret | return eax; | label_5: 0x004128a4 mov rdi, r12 | 0x004128a7 call 0x404a70 | eax = strlen (r12); 0x004128ac test eax, eax | | if (eax > 0) { 0x004128ae jg 0x412877 | goto label_2; | } | label_6: 0x004128b0 xor ebx, ebx | ebx = 0; 0x004128b2 jmp 0x412844 | goto label_1; | }