如何反编译由py2exe编译的exe文件?
只有一个exe文件,没有任何zip文件.
如何反编译为pyc或pyo文件?
我正在试图弄清楚如何使用Fernflower Java反编译器.
我可以java-decompiler.jar在以下位置找到:
~/idea-IC-162.1628.40/plugins/java-decompiler/lib/java-decompiler.jar
Run Code Online (Sandbox Code Playgroud)
fernflower.jar但是,没有.我认为这是因为功能已被折叠java-compiler.jar,而Fernflower README在2年内根本没有更新.
但是,当我运行以下内容时:
java -jar ~/idea-IC-162.1628.40/plugins/java-decompiler/lib/java-decompiler.jar myclassfile.class .
Run Code Online (Sandbox Code Playgroud)
我明白了
没有主要的清单属性,在/home//idea-IC-162.1628.40/plugins/java-decompiler/lib/java-decompiler.jar中
IntelliJ是否已停止支持基于命令行的反编译,或者我在这里遗漏了什么?
由于驱动器损坏,我丢失了 Flutter 应用程序的源代码,但debug.apk我的 android 手机中有我的源代码。谁能告诉我如何反编译 Flutterapk以获取源代码。我尝试使用反编译器反编译它,但它没有提供我的源代码,因为 flutter 源代码是 dart 语言。
我情况非常糟糕.我丢失了我的源代码,我的客户需要在应用程序中稍微改变一下.考虑编辑程序集的示例:Test.dll然后添加代码行,最后重新编译它
所以我的问题是: - 有可能这样做吗? - 如果可能的话,编辑程序集然后重新编译它的好工具是什么?
我的一个项目是反编译器,它将本机代码转换为LLVM IR,简化它并输出伪C.程序过程的一个重要阶段是与模式无关的控制流结构,它在程序中查找区域并将其转换为结构化控制流语句(即不是结果).
我不得不推出自己的代码来寻找区域,因为LLVM的区域并不完全符合论文的预期.但是,找到区域需要你有一个后支配树,并且事实证明LLVM的后支配树构建算法不能为没有结束块的函数创建一个,就像用无限循环"结束"的函数一样.
这似乎是因为树构建算法需要一个起点.通常,起点是函数的返回块,因为它后控制每隔一个块; 但是没有任何函数可以旋转到无限循环中,因为它们没有任何return或unreachable终结符.(此时,值得注意的是LLVM的区域代码也依赖于后支配树,对于无法构建的函数也没用.)
在我看来,即使这个算法失败,函数不返回的事实并不意味着你不能为它做一个后支配树.1实际上,如果无限循环具有单个后沿(这是我可以确保的),那么具有该后沿的节点必然会支配图中的每个其他节点,因此应该可以发布帖子 - 主动树.
如果我能找到那个节点,我可以将它提供给LLVM的后dom基础设施,并从中获得一个合理的后支配树.不幸的是,我不是很富有想象力,而且我能想到的唯一直截了当的方法就是确定那个关键节点是"它是支配所有东西的那个",这当然不会帮助我引导后支配树.
寻找后缘并不是特别困难.正如Doug Currie所说,你可以用一个简单的DFS来实现,事实上,我的项目的另一部分就是这样做的.但是,在具有无限循环和嵌套终止循环的函数的情况下,我不知道如何在没有支配信息的情况下从外后边缘告诉内后边缘.(如果它可以提供帮助,在此过程的这个阶段,每个循环都保证有一个入口节点和最多一个出口节点.)
那么如何构建一个没有任何返回基本块的函数的后支配树?
我的编译器和图论背景完全是自学成才.这可能不准确.
我知道有很多工具.我想找到一个很好的工具来向我展示缺少哪个组件.我遇到一个异常,说我尝试运行.NET应用程序时可能缺少一个依赖程序集.
UPDATE
我想在实时服务器上测试它.因此,理想情况下,我可以在不更改服务器的情况下运行它.我可以在服务器上安装应用程序.
提前致谢.
java 中的断言编译为添加到测试中的私有合成静态布尔值 - 该提案在这里有很好的记录:
在其中,我们创建
最终私有静态布尔值$assertionsEnabled = ClassLoader.desiredAssertionStatus(className);
进而
断言(X)变成
if ($assertionsEnabled && !x) { throw }
这完全有道理;)
但是,我注意到我实际得到的是
public void test1(String s) {
assert (!s.equals("Fred"));
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
变成
static final /* synthetic */ boolean $assertionsDisabled;
public void test1(String s) {
if ((!(AssertTest.$assertionsDisabled)) && (s.equals("Fred"))) {
throw new AssertionError();
}
System.out.println(s);
}
static {
AssertTest.$assertionsDisabled = !(AssertTest.class.desiredAssertionStatus());
}
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于他们为什么进行否定测试而不是肯定测试的文档 - 即原始提案捕获了 assertionsENABLED,现在我们使用 assertionsDISABLED。
我唯一能想到的是这可能(可能!)产生更好的分支预测,但这对我来说似乎是一个非常蹩脚的猜测 - Java 哲学(几乎)总是使字节码简单,并让 JIT整理优化。
(请注意,这不是关于断言如何工作的问题 - 我知道!:))
我有一个exe文件,我用Ida反编译它.有人告诉我用Delphi编写的程序,所以我尝试用DeDe反编译但是失败了,没有输出也没有错误.我想知道是否有可能通过尝试专门为编程语言编写的不同反编译器来找到用于创建exe的语言?或者他们可以因为其他原因而失败吗?
给出以下C#代码,其中以两种不同的方式调用Dispose方法:
class Disposable : IDisposable
{
public void Dispose()
{
}
}
class Program
{
static void Main(string[] args)
{
using (var disposable1 = new Disposable())
{
Console.WriteLine("using");
}
var disposable2 = new Disposable();
try
{
Console.WriteLine("try");
}
finally
{
if (disposable2 != null)
((IDisposable)disposable2).Dispose();
}
}
}
Run Code Online (Sandbox Code Playgroud)
一旦使用发布配置编译然后用ildasm反汇编,MSIL看起来像这样:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// Code size 57 (0x39)
.maxstack 1
.locals init ([0] class ConsoleApplication9.Disposable disposable2,
[1] class ConsoleApplication9.Disposable disposable1)
IL_0000: …Run Code Online (Sandbox Code Playgroud)