我使用 IDA pro,hex-rays 来反编译一些 dll 代码。
获取如下代码:
void __stdcall IsDotInLine(double a1, double a2, double a3, double a4, double a5, double a6, double a7)
{
int v7; // edx@1
int v8; // ecx@1
double v9; // st7@10
char v10; // [sp+14h] [bp-88h]@1
double v11; // [sp+54h] [bp-48h]@10
double v12; // [sp+5Ch] [bp-40h]@10
double v13; // [sp+64h] [bp-38h]@10
double v14; // [sp+6Ch] [bp-30h]@6
double v15; // [sp+74h] [bp-28h]@6
double v16; // [sp+7Ch] [bp-20h]@1
double v17; // [sp+84h] [bp-18h]@1
double v18; // [sp+8Ch] [bp-10h]@1
double v19; // [sp+94h] [bp-8h]@1
memset(&v10, -858993460, 0x88u);
sub_100014D3((int)&v15);
v16 = a3;
v18 = a5;
v19 = a4;
v17 = a6;
sub_10001550(&v16);
v16 = v16 - a7;
v18 = v18 + a7;
v17 = v17 - a7;
v19 = v19 + a7;
if ( a1 >= v16 )
{
if ( a1 <= v18 )
{
if ( a2 >= v17 )
{
if ( a2 <= v19 )
{
v15 = a6 - a4;
v14 = a3 - a5;
if ( v15 > 0.000000001 || v15 < -0.000000001 || v14 > 0.000000001 || v14 < -0.000000001 )
{
v13 = -v15 * a3 - v14 * a4;
v11 = fabs(v15 * a1 + v14 * a2 + v13);
v9 = sqrt(v15 * v15 + v14 * v14);
v12 = v11 / v9;
}
}
}
}
}
chkesp(v8, v7);
}
经过我的分析,除了一些功能代码。
我认为这种类型的代码是没有用的,至少在这个函数中,我无法弄清楚“sub_100021C0”函数的用途。
谁能对这段代码有所了解,“sub_100021C0”有什么作用?
谢谢,附上代码
int __thiscall sub_100014D3(int this)
{
return sub_100021C0(this);
}
int __thiscall sub_100021C0(int this)
{
int v1; // ecx@1
int v2; // edx@1
int v3; // eax@1
int v5; // [sp+4Ch] [bp-4h]@1
v5 = this;
*(_DWORD *)this = 0;
*(_DWORD *)(this + 4) = 0;
v1 = v5;
*(_DWORD *)(v5 + 8) = 0;
*(_DWORD *)(v1 + 12) = 0;
v2 = v5;
*(_DWORD *)(v5 + 16) = 0;
*(_DWORD *)(v2 + 20) = 0;
v3 = v5;
*(_DWORD *)(v5 + 24) = 0;
*(_DWORD *)(v3 + 28) = 0;
return v5;
}