Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取Windows可执行文件的源代码?_C#_C++_Vb.net_Visual Studio_Executable - Fatal编程技术网

C# 如何获取Windows可执行文件的源代码?

C# 如何获取Windows可执行文件的源代码?,c#,c++,vb.net,visual-studio,executable,C#,C++,Vb.net,Visual Studio,Executable,我有一些旧的Windows可执行文件。如何使用Visual Studio 2010编辑它们?查看exe源代码的方法有哪些?如果程序是用C语言编写的,那么您可以使用C语言获得几乎原始形式的源代码。您将无法看到注释和局部变量名,但它非常可读 如果它是C++编写的,那就不那么简单了…即使你可以将代码反编译成有效的C++,也不太可能与原始源类似,因为内联函数和优化是难以逆转的。 请注意,通过反向工程和修改源代码,您可能会违反程序的使用条款,除非您自己编写或获得作者的许可。如果是本机代码,您可以将其反汇编

我有一些旧的Windows可执行文件。如何使用Visual Studio 2010编辑它们?查看exe源代码的方法有哪些?

如果程序是用C语言编写的,那么您可以使用C语言获得几乎原始形式的源代码。您将无法看到注释和局部变量名,但它非常可读

<>如果它是C++编写的,那就不那么简单了…即使你可以将代码反编译成有效的C++,也不太可能与原始源类似,因为内联函数和优化是难以逆转的。
请注意,通过反向工程和修改源代码,您可能会违反程序的使用条款,除非您自己编写或获得作者的许可。

如果是本机代码,您可以将其反汇编。但是您不会看到程序员编写的原始代码。您将看到编译器(汇编程序)生成的代码。这段代码可能是经过优化的,尽管它在语义上是等价的,但它可能比普通ASM更难阅读


若它是字节码(MSIL或javabytecode),那个么有一个反编译器可以生成相当好的源代码。对于.NET,这将是反射器。

< P>你不能从EXE获得C++源,并且只能通过反射获得C版本的一些版本。 恐怕您对此无能为力,因为您无法以可读的格式查看它,这是非常有意的,它会显示解释的机器代码,不会像您通常在.cs/.c文件中看到的那样有格式或注释

这几乎是一个碰运气的场景

有人已经在另一个

上问过了,我会(并且已经)使用IDA Pro来反编译可执行文件。它创建了半完整的代码,您可以反编译为汇编或C

如果您有调试符号的副本,请在反编译之前将其加载到IDA中,它将能够命名许多函数、参数等。

使用PE Explorer

用于以任何语言编写的任何*.Exe文件。您可以使用hiew查看源代码(否则,请查看)。你可以在下载。它将是演示版本,但仍然可以查看代码

在此之后,请执行以下步骤:

  • 按alt+f2导航到该文件

  • P>按Enter查看其程序集/C++代码。


    谢谢你的回答。这真的很有帮助。我尝试了.Net reflector,但它对我的exe无效。PeID说它的微软Visual C++ 6。我想没有办法得到消息来源。无论如何,谢谢你,不加解释地投反对票。此外,这个答案与公认的答案相差不远。为了我自己和问题的作者,至少要提到如何改进我的答案。如果你没有删除你的答案,我们可能已经删除了。不管怎样,你的答案是错误的;请参阅问题的其他答案。在许多情况下,使用正确的工具,反向工程可执行映像是可能的。这并不是完全错误的,我的答案与公认的答案有一两点关系。我删除我的答案的原因是,它在几秒钟内被否决了3票,没有人有资格发表评论。谢谢你的回复,我很感激你的努力。它希望我不要因为害怕人们无情地否决一个没有任何解释的答案而费心去做贡献,尽管我不知道所有的事情,但不管是谁给出了答案,这都是对信心的打击。杰米,我理解你的沮丧,但我怀着应有的尊重,你应该能够弄清楚为什么你的答案在没有任何评论的情况下被否决。当你开始收到反对票时,你应该看看其他答案。你的观点与上面的观点直接矛盾。“你对此无能为力”!=“如果是.NET,你可以很容易地完成,如果是本地代码,就更难了。”我有点同意杰米的观点。是的,好的,所以他的回答与其他人相矛盾,可能是错的。所以,继续投票否决它,但按照So告诉他原因:“最重要的是,要诚实。如果你看到错误信息,就投票否决。插入评论,指出具体错误。甚至更好——编辑和改进信息!提供你自己更强、更快、更好的答案!”我尝试了一个简单的C#VS 2012 Express项目exe的Reflector,我丢失了源文件,当我打开Reflector为代码创建的项目时,Reflector导出的东西有100多个错误。我尝试了其他方法,但我只是运气好——不仅没有停止构建的错误,它似乎还保留了变量名,而且我能够进行足够的更改以进行最终构建并获得一个新的.exe。但是,我无法在VS 2012 Express中正确显示表单,因此我所做的更改都是在代码中进行的。我的建议是只做一些小的调整。为了弄清楚,我也不能得到C源代码,对吗?那么组装呢?