反编译二之代码解读

参考
jad反编译之后会出一些错误,程序中使用了goto label和break label语句,增加阅读难度,需要分析并修改。总结错误代码还原规则:
一、if…else 语句(会把if ..esle 反编译成 if …while(true)结构.)
反编译代码

if (paramBoolean)
    paramTextView.setTextColor(-16727809);
while (true)
{
    return;
    paramTextView.setTextColor(-1315861);
}

还原后

if (paramBoolean)
{
    paramTextView.setTextColor(-16727809);
}
else
{
    paramTextView.setTextColor(-1315861);
}  

二、会将语句倒序,出现break label结构
反编译代码

  if (paramInt1 != 1)
      break label185;
    if (this.countChild_1 == null)
    {
      this.countChild_1 = new PokerCountChild(this.mContext);
      this.countChild_1 = new PokerCountChild(this.mContext);
      this.countChild_1.setPosition((int)(0.83D * BaseGameActivity.screenWidth-this.countChild_1.getWidth()), (int)(0.2D * BaseGameActivity.screenHeight));
      this.countChild_1.setCount(paramInt2);
      addOneChild(this.countChild_1);
      if (paramInt2 == 0)
        this.countChild_1.setAlpha(0);
    }
    this.countChild_1.setCount(paramInt2);

label185: 
    do
      return;
    while (paramInt1 != 2);
    if (this.countChild_2 == null)
    {
      this.countChild_2 = new PokerCountChild(this.mContext);
      this.countChild_2 = new PokerCountChild(this.mContext);
      this.countChild_2.setPosition((int)(0.17D * BaseGameActivity.screenWidth),(int)(0.2D * BaseGameActivity.screenHeight));
      this.countChild_2.setCount(paramInt2);
      addOneChild(this.countChild_2);
      if (paramInt2 == 0)
        this.countChild_2.setAlpha(0);
    }
    this.countChild_2.setCount(paramInt2);

还原后

if(paramInt1 == 1)
{
    if(countChild_1 == null)
    {
        countChild_1 = new PokerCountChild(mContext);
        countChild_1 = new PokerCountChild(mContext);
        countChild_1.setPosition((int)(0.83D * (double)BaseGameActivity.screenWidth - (double)countChild_1.getWidth()),  (int)(0.2D * (double)BaseGameActivity.screenHeight));
        countChild_1.setCount(paramInt2);
        addOneChild(countChild_1);
        if(paramInt2 == 0)
            countChild_1.setAlpha(0);
    }
        countChild_1.setCount(paramInt2);
} else if(paramInt1 == 2)
{
    if(countChild_2 == null)
    {
        countChild_2 = new PokerCountChild(mContext);
        countChild_2 = new PokerCountChild(mContext);
        countChild_2.setPosition((int)(0.17D *  (double)BaseGameActivity.screenWidth), (int)(0.2D *= (double)BaseGameActivity.screenHeight));
        countChild_2.setCount(paramInt2);
        addOneChild(countChild_2);
        if(paramInt2 == 0)
            countChild_2.setAlpha(0);
    }
    countChild_2.setCount(paramInt2);
    return;
}

三、switch规则就是一个continue对应一个case.要注意是是要外层的continue才算数,在if里的continue不算
反编译代码

switch (this.mBand)
{
 default:
 case 0:
 case 1:
 case 2:
}
while (true)
{
  return;
    this.mBand.setText("FM1");
  continue;
    this.mBand.setText("FM2");
  continue;
    this.mBand.setText("AM");
}

还原后

switch (mBand)
{
  case 0:
    mBand.setText("FM1");
    break;
  case 1:
    mBand.setText("FM2");
    break;
  case 2:
    mBand.setText("AM");
    break;
  default:
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: DeepXDE是一个用于求解偏微分方程的深度学习框架。它基于TensorFlow和Keras开发,并提供了编写和训练深度学习模型的高级API。DeepXDE的目标是通过在分布式计算环境中运行高性能计算来实现对偏微分方程求解的自动化。 DeepXDE的代码解读主要涉及以下几个方面: 1. 导入和准备数据:首先,我们需要导入DeepXDE和其他必要的库。然后,我们需要准备输入和输出数据。输入数据可以是包含偏微分方程的几何形状和初始条件的网格,输出数据可以是网格上连续变量的解。 2. 定义模型:DeepXDE提供了几个模型类,如PhysicsInformedNN和ResidualNN。可以根据具体需求选择相应的模型类,并设置模型的层数、激活函数、损失函数等参数。 3. 编译和训练模型:在编译模型之前,需要指定优化器和学习率等训练参数。然后,通过调用模型的compile()方法来生成计算图。在训练模型时,可以使用fit()方法,传入输入和输出数据进行模型训练。 4. 评估和预测:训练完成后,可以通过evaluate()方法对模型进行评估,计算模型在测试数据上的损失函数值和其他性能指标。然后,可以使用predict()方法对新的输入数据进行预测,得到相应的输出结果。 总的来说,DeepXDE提供了一种简单而有效的方法来求解偏微分方程。通过编写和训练深度学习模型,可以自动化地找到偏微分方程的解,从而大大简化了求解复杂偏微分方程的过程。 ### 回答2: DeepXDE 是一个用于解决偏微分方程的开源 Python 库。它提供了一种基于深度学习的方法来求解各种类型的偏微分方程,包括椭圆、抛物、双曲型方程等。 DeepXDE 的主要思想是将偏微分方程的求解转化为一个优化问题,通过利用神经网络来逼近方程的解。具体而言,DeepXDE 通过定义一个适当的神经网络结构来表示偏微分方程的解,并将其转化为一个损失函数最小化的问题。该损失函数由方程的残差以及一些平滑性和边界条件的约束项构成。 使用 DeepXDE,用户可以很方便地定义偏微分方程,并指定边界条件和初始化条件。然后,DeepXDE 将自动构建一个神经网络模型,并利用自动微分和梯度下降算法来寻找损失函数的最小值,从而得到方程的数值近似解。 除了求解维和三维偏微分方程外,DeepXDE 还支持求解时变问题、非线性问题和多个方程耦合的问题。此外,DeepXDE 还提供了可视化工具,可以直观地展示方程的数值解,以及解的收敛性和稳定性分析的工具。 总结来说,DeepXDE 是一个强大而灵活的偏微分方程求解工具,利用深度学习的方法能够高效地求解各种类型的偏微分方程。它的优势是使用简单,自动化程度高,而且支持各种情况的问题求解。 ### 回答3: Deepxde是一个深度学习库,专门用于求解偏微分方程和变分不等式问题。它提供了一种灵活和高效的方法来解析复杂的物理方程和模型,可以在科学和工程领域中广泛应用。 Deepxde的代码解读可以从以下几个方面来理解: 1. 数据预处理:Deepxde的代码首先要对输入的数据进行预处理。这包括对输入数据进行标准化、归一化等操作,确保数据的质量和可用性。 2. 神经网络模型:Deepxde使用神经网络来近似解决偏微分方程和变分不等式问题。代码中会定义一个神经网络模型,包括网络的结构、层数、激活函数等。这个模型会根据给定的训练数据进行优化,以获得最佳的模型参数。 3. 损失函数:在Deepxde中,损失函数用于衡量模型的拟合程度和性能。代码中会定义一个损失函数,可以根据具体的问题来选择合适的损失函数。通常,损失函数是根据已知的真实值和模型预测值之间的差异来计算的。 4. 训练过程:Deepxde的代码中会包含训练模型的过程,通过不断迭代和优化模型参数,使得模型能够更好地拟合数据、逼近真实解。这个过程通常包括前向传播和反向传播,通过梯度下降等方法来不断更新权重和偏置。 5. 模型评估:Deepxde的代码通常还包括模型性能评估的部分。通过使用一些评估指标(如误差、精度等),可以对模型的表现进行定量评估,从而判断模型的好坏和可用性。 总的来说,Deepxde的代码解读主要涉及数据预处理、神经网络模型的构建、损失函数的定义、训练过程和模型评估。通过理解和解读Deepxde的代码,可以更好地应用和使用这个库,解决各种实际的偏微分方程和变分不等式问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值