I am going to start by saying that this is my fourth attempt at reverse engineering a crackme and I'm starting to understand how assembly works, which is cool. I am sorry if this question is wrong or if I used the wrong terminology.
I am reversing a mach-0 binary with IDA. When I examine it, I find that there are hundreds of functions with weird names, like this
j___ZNSt3__1plIcNS_11char_traitsIcEENS_9allocatorIcEEEENS_12basic_stringIT_T0_T1_EEPKS6_RKS9_
Now, this doesn't look like pure junk. From it I can 'extract' the following: char_traits, allocator, basic_string.
Apparently it does something with strings, as before there are the following instructions:
lea rsi, goodWork ; "Good work!"
lea rdx, _cido ; _cido in IDA is shown to do -> and [rax], eax ; I have no idea what that means
lea rdi, [rbp+var] ; the only occurrence of var before is at the start -> var = qword ptr - 1C0H ; as always, no idea of what is this
call to_the_function_I_wrote_before
jmp $+5
Is there a technique/way of knowing whatever this function does?
EDIT:
This has been flagged as a duplicate. It's not. The question you've linked only demangles the function name, which is a thing that IDA automatically does.
I need to understand whatever the hell this function does. The demangled function name is to me as helpful as the mangled one. I don't get it. I need a bit of guidance with that.
j__std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > std::__1::operator+<char, std::__1::char_traits<char>, std::__1::allocator<char> >(char const*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
– originally, probably some typedefs or classes or summink like that._cido
pointer equals to address ofand [rax], eax
, because IDA shows you data section as code section. It may however be a pointer to char, a table of ints, a pointer to pointer to pointer. That is, a pointer to almost anything.