IDA反汇编:libskychart.so
目录参数——
StarClusterNumber(char const*)
MessierNumber(char const*)
CaldwellNumber(char const*)
NGCNumber(char const*)
ICNumber(char const*)
LBNNumber(char const*)
BarnardNumber(char const*)
LDNNumber(char const*)
PKNumber(char const*)
PNGNumber(char const*)
UGCNumber(char const*)
UGCANumber(char const*)
PGCNumber(char const*)
MCGNumber(char const*)
CGCGNumber(char const*)
ESONumber(char const*)
ESOLVNumber(char const*)
IRASNumber(char const*)
ArpNumber(char const*)
AbellNumber(char const*)
HicksonNumber(char const*)
VVNumber(char const*)
MarkarianNumber(char const*)
ArakelianNumber(char const*)
QuasarNumber(char const*)
DoubleStarNumber(char const*)
AllenNumber(char const*)
BlancoNumber(char const*)
CederbladNumber(char const*)
DarkNebulaNumber(int,char const*)
TerzanNumber(char const*)
NebulaNumber(char const*)
BayerLetterToNumber(char const*,int)
BayerSymbolToNumber(char const*)
VariableStarLetterToNumber(char )
ConstellNumber(char )
BayerNumber(char const)
VariableStarNumber(char const)
FlamsteedNumber(char const*)
HRNumber(char const*)
HDNumber(char const*)
SAONumber(char const*)
BDNumber(char const*)
CoDNumber(char const*)
CPDNumber(char const*)
GSCNumber(char const*)
GSCIINumber(char const*,uint )
HIPNumber(char const)
TYCNumber(char const*)
LuytenNumber(char const*)
LPNumber(char const*)
LTTNumber(char const*)
LHSNumber(char const*)
GiclasNumber(char const*)
GJNumber(char const*)
ADSNumber(char const*)
WDSNumber(char const*)
signed int __fastcall StringToDeepSkyCatalogNumbers
(const char *a1, int a2, unsigned int *a3, int a4)
{
int v4; // r6
const char *v5; // r9
signed int v6; // r4
const char *v7; // r2
int v8; // r3
int v9; // t1
int v10; // r3
int v11; // r3
bool v12; // zf
int v13; // r3
bool v14; // r10
signed int v15; // r12
signed int v16; // r3
signed int v17; // r5
int v18; // r3
int v19; // r10
_BOOL4 v20; // r3
_BOOL4 v21; // r10
_BOOL4 v22; // r3
bool v24; // zf
bool v25; // nf
unsigned __int8 v26; // vf
unsigned int v27; // r0
unsigned int v28; // r0
unsigned int v29; // r0
unsigned int v30; // r0
unsigned int v31; // r0
unsigned int v32; // r0
unsigned int v33; // r0
unsigned int v34; // r0
int v35; // r4
unsigned int v36; // r3
bool v37; // cf
bool v38; // zf
int v39; // r3
unsigned int v40; // r0
unsigned int v41; // r0
unsigned int v42; // r0
unsigned int v43; // r0
unsigned int v44; // r0
unsigned int v45; // r0
unsigned int v46; // r0
unsigned int v47; // r0
unsigned int v48; // r0
unsigned int v49; // r0
unsigned int v50; // r0
unsigned int v51; // r0
unsigned int v52; // r0
unsigned int v53; // r0
unsigned int v54; // r0
unsigned int v55; // r0
unsigned int v56; // r0
unsigned int v57; // r0
unsigned int v58; // r0
unsigned int v59; // r0
unsigned int v60; // r0
unsigned int v61; // r0
unsigned int v62; // r0
unsigned int v63; // r0
signed int v64; // [sp+0h] [bp-144h]
signed int v65; // [sp+4h] [bp-140h]
unsigned int v66; // [sp+Ch] [bp-138h]
unsigned int *v67; // [sp+10h] [bp-134h]
char s; // [sp+1Ch] [bp-128h]
char v69[36]; // [sp+120h] [bp-24h]
v66 = a2;
v4 = a4;
v67 = a3;
v5 = a1;
memset(&s, 0, 0x100u);
strlcpy(&s, v5, 256);
v6 = *(unsigned __int8 *)v5;
if ( *v5 )
{
if ( (unsigned int)(v6 - 48) <= 9 )
{
v10 = -1;
v6 = 0;
}
else
{
v7 = v5;
v6 = 0;
do
{
v9 = *((unsigned __int8 *)v7++ + 1);
v8 = v9;
++v6;
}
while ( v9 && (unsigned int)(v8 - 48) > 9 );
v10 = v6 - 1;
}
}
else
{
v10 = -1;
}
v11 = v5[v10];
v12 = v11 == 43;
if ( v11 != 43 )
v12 = v11 == 45;
if ( v12 )
--v6;
if ( v6 > 0 )
{
v13 = (int)&v5[v6];
if ( v5[v6 - 1] == 32 )
{
while ( --v6 )
{
if ( *(_BYTE *)(--v13 - 1) != 32 )
goto LABEL_44;
}
v14 = 0;
s = 0;
goto LABEL_17;
}
}
LABEL_44:
v14 = v6 > 1;
v26 = 0;
v24 = v4 == 0;
v25 = v4 < 0;
if ( v4 > 0 )
{
v26 = __OFSUB__(v6, 1);
v24 = v6 == 1;
v25 = v6 - 1 < 0;
}
v69[v6 - 260] = 0;
if ( (unsigned __int8)(v25 ^ v26) | v24 || StringCompareProc(&s, "Messier", v6, dword_6EF208) )
{
LABEL_17:
v15 = 0;
v16 = 1;
v17 = 0;
goto LABEL_18;
}
v27 = MessierNumber(&v5[v6]);
if ( !v27 )
{
v15 = 0;
v65 = 1;
v17 = 0;
goto LABEL_175;
}
v15 = 4;
v16 = 2;
v17 = 1;
*v67 = v27;
LABEL_18:
if ( v17 >= v4 )
goto LABEL_19;
v65 = v16;
LABEL_175:
v64 = v15;
if ( !StringCompareProc(&s, "M", 0, dword_6EF208) )
{
v62 = MessierNumber(&v5[v6]);
if ( v62 )
{
v17 = v65;
*(unsigned int *)((char *)v67 + v64) = v62;
}
}
LABEL_19:
if ( v17 < v4 )
v18 = v14;
else
v18 = 0;
if ( !v18 || StringCompareProc(&s, "Caldwell", v6, dword_6EF208) )
{
if ( v17 >= v4 )
goto LABEL_24;
}
else
{
v42 = CaldwellNumber(&v5[v6]);
if ( v42 )
{
v67[v17++] = v42;
if ( v17 >= v4 )
goto LABEL_24;
}
}
if ( !StringCompareProc(&s, "C", 0, dword_6EF208) )
{
v43 = CaldwellNumber(&v5[v6]);
if ( !v43 )
goto LABEL_104;
v67[v17++] = v43;
}
if ( v17 >= v4 )
goto LABEL_24;
LABEL_104:
if ( !StringCompareProc(&s, "NGC", 0, dword_6EF208) )
{
v44 = NGCNumber(&v5[v6]);
if ( !v44 )
goto LABEL_108;
v67[v17++] = v44;
}
if ( v17 >= v4 )
goto LABEL_24;
LABEL_108:
if ( StringCompareProc(&s, "IC", 0, dword_6EF208) )
goto LABEL_111;
v45 = ICNumber(&v5[v6]);
if ( v45 )
{
v67[v17++] = v45;
LABEL_111:
if ( v17 >= v4 )
goto LABEL_24;
}
if ( !StringCompareProc(&s, "LBN", 0, dword_6EF208) )
{
v46 = LBNNumber(&v5[v6]);
if ( v46 )
v67[v17++] = v46;
}
LABEL_24:
if ( v17 < v4 )
v19 = v14;
else
v19 = 0;
if ( !v19 || StringCompareProc(&s, "Barnard", v6, dword_6EF208) )
{
if ( v17 >= v4 )
goto LABEL_29;
}
else
{
v49 = BarnardNumber(&v5[v6]);
if ( v49 )
{
v67[v17++] = v49;
if ( v17 >= v4 )
goto LABEL_29;
}
}
if ( !StringCompareProc(&s, "B", 0, dword_6EF208) )
{
v50 = BarnardNumber(&v5[v6]);
if ( !v50 )
goto LABEL_130;
v67[v17++] = v50;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_130:
if ( !StringCompareProc(&s, "LDN", 0, dword_6EF208) )
{
v51 = LDNNumber(&v5[v6]);
if ( !v51 )
goto LABEL_134;
v67[v17++] = v51;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_134:
if ( !StringCompareProc(&s, "PNG", 0, dword_6EF208) )
{
v52 = PNGNumber(&v5[v6]);
if ( !v52 )
goto LABEL_138;
v67[v17++] = v52;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_138:
if ( !StringCompareProc(&s, "PN G", 0, dword_6EF208) )
{
v53 = PNGNumber(&v5[v6]);
if ( !v53 )
goto LABEL_142;
v67[v17++] = v53;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_142:
if ( !StringCompareProc(&s, "PK", 0, dword_6EF208) )
{
v54 = PKNumber(&v5[v6]);
if ( !v54 )
goto LABEL_146;
v67[v17++] = v54;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_146:
if ( !StringCompareProc(&s, "UGC", 0, dword_6EF208) )
{
v55 = UGCNumber(&v5[v6]);
if ( !v55 )
goto LABEL_150;
v67[v17++] = v55;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_150:
if ( !StringCompareProc(&s, "UGCA", 0, dword_6EF208) )
{
v56 = UGCANumber(&v5[v6]);
if ( !v56 )
goto LABEL_154;
v67[v17++] = v56;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_154:
if ( !StringCompareProc(&s, "PGC", 0, dword_6EF208) )
{
v57 = PGCNumber(&v5[v6]);
if ( !v57 )
goto LABEL_158;
v67[v17++] = v57;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_158:
if ( !StringCompareProc(&s, "Arp", 0, dword_6EF208) )
{
v58 = ArpNumber(&v5[v6]);
if ( !v58 )
goto LABEL_162;
v67[v17++] = v58;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_162:
if ( !StringCompareProc(&s, "Abell", 0, dword_6EF208) )
{
v59 = AbellNumber(&v5[v6]);
if ( !v59 )
goto LABEL_166;
v67[v17++] = v59;
}
if ( v17 >= v4 )
goto LABEL_29;
LABEL_166:
if ( StringCompareProc(&s, "Hickson", 0, dword_6EF208) )
goto LABEL_169;
v60 = HicksonNumber(&v5[v6]);
if ( v60 )
{
v67[v17++] = v60;
LABEL_169:
if ( v17 >= v4 )
goto LABEL_29;
}
if ( !StringCompareProc(&s, "HCG", 0, dword_6EF208) )
{
v61 = HicksonNumber(&v5[v6]);
if ( v61 )
v67[v17++] = v61;
}
LABEL_29:
if ( v17 < v4 )
v20 = v6 > 2;
else
v20 = 0;
if ( !v20 || StringCompareProc(&s, "Markarian", v6, dword_6EF208) )
{
if ( v17 >= v4 )
goto LABEL_34;
}
else
{
v47 = MarkarianNumber(&v5[v6]);
if ( v47 )
{
v67[v17++] = v47;
if ( v17 >= v4 )
goto LABEL_34;
}
}
if ( !StringCompareProc(&s, "Mk", 0, dword_6EF208) )
{
v48 = MarkarianNumber(&v5[v6]);
if ( v48 )
v67[v17++] = v48;
}
LABEL_34:
if ( v17 < v4 )
v21 = v6 > 2;
else
v21 = 0;
if ( !v21 || StringCompareProc(&s, "Velyaminov-Vorontosov", v6, dword_6EF208) )
{
if ( v17 >= v4 )
goto LABEL_39;
}
else
{
v40 = VVNumber(&v5[v6]);
if ( v40 )
{
v67[v17++] = v40;
if ( v17 >= v4 )
goto LABEL_39;
}
}
if ( !StringCompareProc(&s, "VV", 0, dword_6EF208) )
{
v41 = VVNumber(&v5[v6]);
if ( v41 )
v67[v17++] = v41;
}
LABEL_39:
v22 = v17 < v4;
if ( v6 <= 4 )
v22 = 0;
if ( !v22 || StringCompareProc(&s, "Arakelian", v6, dword_6EF208) )
{
if ( v17 >= v4 )
return v17;
}
else
{
v28 = ArakelianNumber(&v5[v6]);
if ( v28 )
{
v67[v17++] = v28;
if ( v17 >= v4 )
return v17;
}
}
if ( !StringCompareProc(&s, "Arak", 0, dword_6EF208) )
{
v29 = ArakelianNumber(&v5[v6]);
if ( !v29 )
goto LABEL_57;
v67[v17++] = v29;
}
if ( v17 >= v4 )
return v17;
LABEL_57:
if ( !StringCompareProc(&s, "IRAS", 0, dword_6EF208) )
{
v30 = IRASNumber(&v5[v6]);
if ( !v30 )
goto LABEL_61;
v67[v17++] = v30;
}
if ( v17 >= v4 )
return v17;
LABEL_61:
if ( !StringCompareProc(&s, "ESO-LV", 0, dword_6EF208) )
{
v31 = ESOLVNumber(&v5[v6]);
if ( !v31 )
goto LABEL_65;
v67[v17++] = v31;
}
if ( v17 >= v4 )
return v17;
LABEL_65:
if ( !StringCompareProc(&s, "ESO", 0, dword_6EF208) )
{
v32 = ESONumber(&v5[v6]);
if ( !v32 )
goto LABEL_69;
v67[v17++] = v32;
}
if ( v17 >= v4 )
return v17;
LABEL_69:
if ( !StringCompareProc(&s, "CGCG", 0, dword_6EF208) )
{
v33 = CGCGNumber(&v5[v6]);
if ( !v33 )
goto LABEL_73;
v67[v17++] = v33;
}
if ( v17 >= v4 )
return v17;
LABEL_73:
if ( !StringCompareProc(&s, "MCG", 0, dword_6EF208) )
{
v34 = MCGNumber(&v5[v6]);
if ( !v34 )
goto LABEL_77;
v67[v17++] = v34;
}
if ( v17 >= v4 )
return v17;
LABEL_77:
if ( StringCompareProc(v5, "3C", 2, dword_6EF208) )
goto LABEL_78;
v63 = QuasarNumber(v5 + 2);
if ( v63 )
{
v67[v17++] = v63;
LABEL_78:
if ( v17 >= v4 )
return v17;
}
v35 = 1 - v66;
v36 = v66 - 10;
if ( v66 > 1 )
v35 = 0;
v37 = 1;
v38 = v66 == 0;
if ( v66 )
{
v37 = v36 >= 2;
v38 = v36 == 2;
}
if ( !v38 && v37 || (v17 += StarClusterNumbers(v5, &v67[v17], v4 - v17), v4 > v17) )
{
if ( v66 - 13 <= 2 )
v39 = v35 | 1;
else
v39 = v35;
if ( v39 )
v17 += NebulaNumbers(v5, &v67[v17], v4 - v17);
}
return v17;
}