SkySafari函数破解

本文详细解析了IDA反汇编工具对libskychart.so库中深空天体目录参数的处理过程,包括多种天体编号系统的转换逻辑,如Messier、Caldwell等,并通过字符串匹配来识别不同的天体编号。

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;
}

C语言-光伏MPPT算法:电导增量法扰动观察法+自动全局搜索Plecs最大功率跟踪算法仿真内容概要:本文档主要介绍了一种基于C语言实现的光伏最大功率点跟踪(MPPT)算法,结合电导增量法与扰动观察法,并引入自动全局搜索策略,利用Plecs仿真工具对算法进行建模与仿真验证。文档重点阐述了两种经典MPPT算法的原理、优缺点及其在不同光照和温度条件下的动态响应特性,同时提出一种改进的复合控制策略以提升系统在复杂环境下的跟踪精度与稳定性。通过仿真结果对比分析,验证了所提方法在快速性和准确性方面的优势,适用于光伏发电系统的高效能量转换控制。; 适合人群:具备一定C语言编程基础和电力电子知识背景,从事光伏系统开发、嵌入式控制或新能源技术研发的工程师及高校研究人员;工作年限1-3年的初级至中级研发人员尤为适合。; 使用场景及目标:①掌握电导增量法与扰动观察法在实际光伏系统中的实现机制与切换逻辑;②学习如何在Plecs中搭建MPPT控制系统仿真模型;③实现自动全局搜索以避免传统算法陷入局部峰值问题,提升复杂工况下的最大功率追踪效率;④为光伏逆变器或太阳能充电控制器的算法开发提供技术参考与实现范例。; 阅读建议:建议读者结合文中提供的C语言算法逻辑与Plecs仿真模型同步学习,重点关注算法判断条件、步长调节策略及仿真参数设置。在理解基本原理的基础上,可通过修改光照强度、温度变化曲线等外部扰动因素,进一步测试算法鲁棒性,并尝试将其移植到实际嵌入式平台进行实验验证。
【无人机协同】动态环境下多无人机系统的协同路径规划与防撞研究(Matlab代码实现)​ 内容概要:本文围绕动态环境下多无人机系统的协同路径规划与防撞问题展开研究,提出基于Matlab的仿真代码实现方案。研究重点在于在复杂、动态环境中实现多无人机之间的高效协同飞行与避障,涵盖路径规划算法的设计与优化,确保无人机集群在执行任务过程中能够实时规避静态障碍物与动态冲突,保障飞行安全性与任务效率。文中结合智能优化算法,构建合理的成本目标函数(如路径长度、飞行高度、威胁规避、转弯角度等),并通过Matlab平台进行算法验证与仿真分析,展示多机协同的可行性与有效性。; 适合人群:具备一定Matlab编程基础,从事无人机控制、路径规划、智能优化算法研究的科研人员及研究生。; 使用场景及目标:①应用于灾害救援、军事侦察、区域巡检等多无人机协同任务场景;②目标是掌握多无人机系统在动态环境下的路径规划与防撞机制,提升协同作业能力与自主决策水平;③通过Matlab仿真深入理解协同算法的实现逻辑与参数调优方法。; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注目标函数设计、避障策略实现与多机协同逻辑,配合仿真结果分析算法性能,进一步可尝试引入新型智能算法进行优化改进。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值