请问这段ida代码怎么反汇编呢
下面这段代码。怎么能想个办法,运行一下,看下参数啥的,方便看算法 具体是啥样的呢? 多谢各位了__int64 __fastcall main(int argc, char** argv)
{
signed __int64 v2; // r15
char* array1; // rsi
signed __int64 endPtrOfArray1; // rdi
_DWORD* vectorInt2; // r14
_DWORD* v6; // rbx
_DWORD* v7; // rbx
signed __int64 v8; // r15
int* v9; // rdx
int v10; // eax
signed int v11; // eax
int* v12; // rcx
std::basic_ostream<char, std::char_traits<char> >* v13; // rax
int* v14; // rcx
unsigned __int64 v15; // rdx
unsigned __int64 v16; // rdx
unsigned __int64 v20; // rdi
std::basic_ostream<char, std::char_traits<char> >* v25; // rax
int v26; //
__int128 Src; //
int v28; //
std::vector<int, std::allocator<int> > vectorInt1; //
__int128 v30; //
char* v31; //
__int128 v32; //
char* v33; //
v30 = 0i64;
_mm_storeu_si128((__m128i*) & Src, _mm_load_si128((const __m128i*) & _xmm));
v2 = 5i64;
v28 = 5;
array1 = (char*)operator new(20ui64);
*(_QWORD*)&v30 = array1;
endPtrOfArray1 = (signed __int64)(array1 + 20);
v31 = array1 + 20;
memmove_0(array1, &Src, 0x14ui64);
*((_QWORD*)&v30 + 1) = array1 + 20;
v32 = 0i64;
vectorInt2 = operator new(0x14ui64);
*(_QWORD*)&v32 = vectorInt2;
v33 = (char*)(vectorInt2 + 5);
*(_OWORD*)vectorInt2 = 0i64;
vectorInt2 = 0;
*((_QWORD*)&v32 + 1) = vectorInt2 + 5;
_mm_storeu_si128((__m128i*) & vectorInt1, (__m128i)0i64);
vectorInt1._Mypair._Myval2._Myend = 0i64;
v6 = vectorInt2;
do
{
std::basic_istream<char, std::char_traits<char>>::operator>>(*(_QWORD*)std::cin.gap0, v6);
++v6;
--v2;
} while (v2);
v7 = array1;
if (array1 != (char*)endPtrOfArray1)
{
v8 = (char*)vectorInt2 - array1;
v9 = vectorInt1._Mypair._Myval2._Mylast;
do
{
v10 = *v7 * *(_DWORD*)((char*)v7 + v8);
v26 = *v7 * *(_DWORD*)((char*)v7 + v8);
if (v9 == vectorInt1._Mypair._Myval2._Myend)
{
std::vector<int, std::allocator<int>>::_Emplace_reallocate<int>(&vectorInt1, v9, &v26);
v9 = vectorInt1._Mypair._Myval2._Mylast;
}
else
{
*v9 = v10;
v9 = vectorInt1._Mypair._Myval2._Mylast + 1;
++vectorInt1._Mypair._Myval2._Mylast;
}
++v7;
} while (v7 != (_DWORD*)endPtrOfArray1);
}
v11 = 2;
v12 = vectorInt1._Mypair._Myval2._Myfirst;
do
{
if (*v12 != v11)
{
v25 = std::operator<<<std::char_traits<char>>(
*(std::basic_ostream<char, std::char_traits<char> >**)std::cout.gap0,
"You failed!");
std::basic_ostream<char, std::char_traits<char>>::operator<<(v25, std::endl<char, std::char_traits<char>>);
exit(0);
}
v11 += 2;
++v12;
} while (v11 < 12);
v13 = std::operator<<<std::char_traits<char>>(
*(std::basic_ostream<char, std::char_traits<char> >**)std::cout.gap0,
"You win!");
std::basic_ostream<char, std::char_traits<char>>::operator<<(v13, std::endl<char, std::char_traits<char>>);
system("pause");
v14 = vectorInt1._Mypair._Myval2._Myfirst;
if (vectorInt1._Mypair._Myval2._Myfirst)
{
v15 = 4i64
* ((_QWORD)((char*)vectorInt1._Mypair._Myval2._Myend - (char*)vectorInt1._Mypair._Myval2._Myfirst) >> 2);
if (v15 >= 0x1000)
{
v15 += 39i64;
v14 = (int*)*((_QWORD*)vectorInt1._Mypair._Myval2._Myfirst - 1);
if ((unsigned __int64)((char*)vectorInt1._Mypair._Myval2._Myfirst - (char*)v14 - 8) > 0x1F)
_invalid_parameter_noinfo_noreturn();
}
operator delete(v14, v15);
_mm_storeu_si128((__m128i*) & vectorInt1, (__m128i)0i64);
vectorInt1._Mypair._Myval2._Myend = 0i64;
}
if (vectorInt2)
{
v16 = 20i64;
operator delete(vectorInt2, v16);
}
if (array1)
{
v20 = 20i64;
operator delete(array1, v20);
}
return 0i64;
} qzhsjz 发表于 2020-8-14 18:00
这就已经是反出来的C代码了,你还想要啥……
您看。我就想放到vs里能跑。这样我不是能看看。每一步怎么执行的,参数变化是啥。我能给点参数把算法逆向出来是不。哥,给瞧瞧成不 这就已经是反出来的C代码了,你还想要啥…… Deuez 发表于 2020-8-14 20:10
IDA只能反编译成这样
这样的c语言伪代码已经够好看了的。
ida 可以动态调试 一段 伪代码? 能看传参啥的之类的么? Deuez 发表于 2020-8-14 20:10
IDA只能反编译成这样
这样的c语言伪代码已经够好看了的。
兄弟怎么样联系 Deuez 发表于 2020-8-22 17:03
咋了?????
有个问题请教一下
页:
[1]
2