下面这个是IDA Pro F5的代码,对应一个类的构造函数,谁能帮我解释下构造函数中写的是什么,数组赋值吗,下面的字符串也是数组吗,怎么构造函数还有返回值呢?各种疑问
初学IDA,求前辈指点
__int64 __usercall CFilePath::CFilePath@<rax>(__int64 a1@<rbp>, __int64 a2@<rdi>, __int64 a3@<rsi>)
{
__int64 result; // rax@1
*(_QWORD *)(a1 - 32) = a2;
*(_QWORD *)(a1 - 40) = a3;
std::allocator<char>::allocator(a1 - 9, a3);
std::string::string(*(_QWORD *)(a1 - 32), *(_QWORD *)(a1 - 40), a1 - 9);
std::allocator<char>::~allocator(a1 - 9);
*(_BYTE *)(*(_QWORD *)(a1 - 32) + 8LL) = 0;
*(_BYTE *)(*(_QWORD *)(a1 - 32) + 9LL) = 0;
*(_BYTE *)(*(_QWORD *)(a1 - 32) + 10LL) = 0;
*(_BYTE *)(*(_QWORD *)(a1 - 32) + 11LL) = 0;
*(_BYTE *)(*(_QWORD *)(a1 - 32) + 12LL) = 0;
std::string::string((std::string *)(*(_QWORD *)(a1 - 32) + 16LL));
std::string::string((std::string *)(*(_QWORD *)(a1 - 32) + 24LL));
std::string::string((std::string *)(*(_QWORD *)(a1 - 32) + 32LL));
std::string::string((std::string *)(*(_QWORD *)(a1 - 32) + 40LL));
std::string::string((std::string *)(*(_QWORD *)(a1 - 32) + 48LL));
result = *(_QWORD *)(a1 - 32);
*(_DWORD *)(result + 56) = -1;
return result;
}
[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!