我有一些使用 Hex Rays 的反编译代码。我可以看到有一个内存复制操作,但我迷失在代码之后尝试使用诸如_floatsidf. 这段代码试图做什么?
int __fastcall v6495(const void *a1, size_t a2)
{
const void *v2; // r6@1
size_t v3; // r7@1
int v4; // r0@1
int v5; // r7@1
__int64 v6; // r8@1
int v7; // r1@1
int v8; // r0@1
__int64 v9; // r0@1
__int64 v10; // r0@1
__int64 v11; // ST00_8@1
int v12; // r1@1
int v13; // r0@1
__int64 v14; // r0@1
int v15; // r0@1
int v16; // r1@1
__int64 v17; // r0@1
v2 = a1;
v3 = a2;
gettimeofday(&v824, 0);
pthread_mutex_lock((pthread_mutex_t *)(v217 + 110720));
v4 = v217;
*(_DWORD *)(v217 + 73728) = -2028273664;
memcpy((void *)(v4 + 73732), v2, v3);
pthread_cond_signal((pthread_cond_t *)(v217 + 110976));
pthread_cond_wait((pthread_cond_t *)(v217 + 111232), (pthread_mutex_t *)(v217 + 110720));
pthread_mutex_unlock((pthread_mutex_t *)(v217 + 110720));
v5 = v217;
gettimeofday(&v825, 0);
LODWORD(v6) = _floatsidf(v825.tv_sec);
HIDWORD(v6) = v7;
v8 = _floatsidf(v825.tv_usec);
LODWORD(v9) = _divdf3(v8);
LODWORD(v10) = _aeabi_dadd(v6, v9);
v11 = v10;
LODWORD(v6) = _floatsidf(v824.tv_sec);
HIDWORD(v6) = v12;
v13 = _floatsidf(v824.tv_usec);
LODWORD(v14) = _divdf3(v13);
v15 = _aeabi_dadd(v6, v14);
LODWORD(v17) = _subdf3(v11, HIDWORD(v11), v15, v16);
unk_408D81C8 = v17;
return v5 + 73732;
}
v217v6520在.bss段中的前一个函数中初始化。
int v3480()
{
__int32 v0; // r0@1
v0 = time(0);
srand48(v0);
v877 = &v3688;
v1277 = &v7299;
v1634 = &v5690;
v2042 = &v7024;
v873 = &v3688;
v872 = &unk_40ABAFB5;
v1274 = &v7299;
v485 = &unk_40ABAFF5;
v1631 = &v5690;
v1629 = &unk_40ABAFD9;
v2037 = &v7024;
v2038 = &unk_40ABAFE9;
v5661 = -1;
v2325 = -1;
v1259 = -1;
v4048 = -1;
v5509 = &v5497;
v3845 = &unk_40ABAEEC;
v3522 = &v4191;
v7253 = &unk_40ABAEE4;
v2081 = &v3009;
v5828 = &unk_40ABAEDC;
v7014 = &v2061;
v3636 = &unk_40ABAED4;
v221 = &v6523;
v218 = &v6524;
v219 = &v6525;
v217 = &v6520;
v1455 = &v6523;
unk_40ABAEF4 = &v6524;
v7297 = &dword_409581D0;
v5530 = &dword_409581D0;
if ( dword_409581D0 )
{
v6935();
}
else
{
v4335();
dword_409581D0 = 1;
}
return 0;
}