我正在尝试使用JetBrains dotPeek 1.4符号服务器但是我遇到了一些失败的第三方程序集,dotPeek状态为:
Pdb has not been generated because assembly does not contain debug directory
Run Code Online (Sandbox Code Playgroud)
使用CFF Explorer我发现这些程序集具有空的"调试目录"可移植可执行(PE)标头值.
是否有一种(简单)方法来编辑PE以添加Debug Directory标头值?
我刚刚使用DotPeek反编译了一些第三方来源来调试问题.输出代码包含一些不常见的操作符,AFAIK无效C#,所以我想知道它们是什么意思...
摘录看起来像(包括Dotpeek评论,因为它们可能相关);
protected internal void DoReceive(ref byte[] Buffer, int MaxSize, out int Written)
{
Written = 0;
.
.
.
// ISSUE: explicit reference operation
// ISSUE: variable of a reference type
int& local = @Written;
int num = SomeMethod();
.
.
.
// ISSUE: explicit reference operation
^local = num;
}
Run Code Online (Sandbox Code Playgroud)
那么,那里有3个不寻常的操作符...... int& = @Written
似乎是在指定一个用@字符无意义命名的变量的指针?
但是什么是^local = num;
???
好的,这是来自ILSpy的等效片段,这更有意义,我想反编译到C#没有产生有效的等价物?
'C#'
int& local = @Written;
byte[] numArray2 = this.FInSpool;
int num = (int) __Global.Min(numArray2 == null ? …
Run Code Online (Sandbox Code Playgroud) 喜.我正在阅读Digi Traffic Accelerator
反编译源(我认为这是最好的学习方法),直到我得到一些不可理解的代码!请看一下:
internal class ProxyFarm
{
private static Random rand = new Random();
private static Regex UserPassAtHostPort = new Regex("\r\n ^\r\n (?<user>[^:]+?) : (?<pass>[^@]+?)\r\n @\r\n (?<host>[^:]+? (?: : \\d+)? )\r\n $", RegexOptions.IgnorePatternWhitespace);
private static Regex HostPortUserPass = new Regex("\r\n ^\r\n (?<host>[^:]+? : \\d+) : (?<user>[^:]+?) : (?<pass>.+?)\r\n $", RegexOptions.IgnorePatternWhitespace);
public const string NEW = "new";
public const string ACTIVE = "active";
public const string BLOCKED_BY_GOOGLE = "blocked by Google";
public const string INACTIVE = "inactive";
public const …
Run Code Online (Sandbox Code Playgroud) 我正在看一些我自己的代码,我用dotPeek反编译.
我一直看到这个:
// ISSUE: method pointer
Run Code Online (Sandbox Code Playgroud)
这是什么意思?这是为了通知我代码的问题吗?
谢谢
我对dotPeek符号服务器功能的理解如下:
每当IDE要求调试给定程序集的信息时,dotPeek会将程序集和符号(+反编译的源代码?)反编译回IDE.
但我的经验如下:
配置我的IDE并在调试时检查"输出"窗口后,我看到正在加载所有托管程序集的符号.我可以进入这些库/ .NET平台并在那里调试没有问题.
但是有一个我遇到问题的第三方组装.输出窗口在我的应用程序启动期间打印出来:
'iisexpress.exe' (Managed (v4.0.30319)): Loaded 'C:\Users\kostas\AppData\Local\Temp\Temporary ASP.NET Files\root\9bc23327\4940c90d\assembly\dl3\8fde229b\401c97fd_0937d001\WebApi.Hal.dll', Symbols loaded.
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试进入WebApi.Hal类时,IDE会要求我提供源代码文件,并输出以下内容:
SRCSRV: The module 'C:\Users\kostas\AppData\Local\Temp\Temporary ASP.NET Files\root\9bc23327\4940c90d\assembly\dl3\8fde229b\401c97fd_0937d001\WebApi.Hal.dll' does not contain source server information.
Run Code Online (Sandbox Code Playgroud)
组态:
选项 - >调试 - >符号:
按此顺序配置三个Symbol服务器
http://srv.symbolsource.org/pdb/Public
http://referencesource.microsoft.com/symbols
选项 - >调试 - >常规截图:
我错过了什么?
对于这个新手问题很抱歉,但是经过3个小时的敲打我的头后我才得到了DotPeek,我发现它很适合查看.dll文件.但是我根本无法编辑它们.是否有像DotPeek这样的免费软件让我编辑DLL而不仅仅是看它?
更新:我能够单独保存.dll文件中的所有.cs文件,并在VS(Visual Studio)中编辑它们.现在如何在编辑后将它们恢复到.dll文件中?
谢谢!
我使用dotPeek v1.2
with VS2013 Update 3
尝试调试引用的C#.dll的代码.我已经按照从下面的教程的所有方向:使用dotPeek作为一个符号服务器(http://localhost:33417/
设置为符号的位置等),说实话,我已经读过了一堆像文章这样和这个,通过所有必要的设置梳理和调试第三方非骨架的还真没见过1个有效的解决方案.dll文件,所以我不相信这是一个完全正常工作的产品,从这个方面.
Regardelss,dotPeek应该允许一旦符号服务器开始步入并根据他们的文档调试来自VSNET的第三方程序集的代码.我知道为dotPeek选择哪些.dll,因为我从Debug - > Windows - > Modules检查了它们的路径.
我碰巧ReSharper
还安装了允许我在右键单击一行代码并选择"转到声明"时进行反编译.问题是,符号服务器似乎没有做任何事情来协助在调试时提供代码.相反,ReSharper提供的反编译源似乎是VS.NET想要进入的.问题是我总是得到以下错误:
源文件:C:\ Users\username\AppData\Local\JetBrains\ReSharper\v8.2\SolutionCaches_ReSharper.Meijer.Ecommerce.Nav.WebAppServices.-382002776\Decompiler\decompiler\53\66e7ccc2\MyClass.cs
模块:C:\ Projects\MyProject\bin\Debug
进程:[24808] vstest.executionengine.x86.exe
源文件与构建模块时不同.您希望调试器还能使用它吗?
如果我说'是'并且调试器中的步骤似乎位于文件中不存在且不同步的行上.这是有道理的,因为它.cs
从"源文件"位置显示类,但从.dll加载.dll/bin/Debug
但是,我不明白为什么会发生这种情况,因为dotPeek
应该提供加载的符号,/bin/Debug
而不是试图进入任何反编译源ReSharper
.
我该如何配置,从而VS2103
将实际调试符号和代码担任了dotPeek
?
客户端已经与他们之前的开发人员烧毁了桥梁,我正在尝试从他们的工资单可执行文件的剩余部分中提取源代码,不幸的是,作为一个Web开发人员,我对.NET框架没有多少经验.
编辑:我们的客户合法拥有该软件,但没有要求源代码,开发人员没有回应我们的通信.我在SO上提出这个问题的意图不是为了法律建议(我们有人处理),而是用于反编译的任何选项.
我之前成功地使用JetBrains dotPeek反编译了可执行文件,但是它们都运行了.Net Framework v2.0/v4.5
框架.我正在使用的客户端工资单可执行文件,.Net Core v4.5
这是dotPeek,ILSpy或其他C#反编译软件无法识别的,我作为.NET程序集文件运行.
经过一番研究,我相信.Net Core
最近是开源的......但是我不确定如何继续进行反编译过程,或者在这一点上是否可行.有什么建议?
注意:我会接受一个答案:"不可能反编译,但你先尝试过X,Y,Z吗?".我需要让客户知道是否可以完成,因为我们的运行时间很紧.
我做了一些澄清:program.exe
在dotPeek中打开,右键单击属性给我这个:
它声称"不是.NET程序集文件",但我可以运行可执行文件.
编辑:是否有可能从可执行文件中提取更多信息,以便我可以缩小另一种方法进行反编译?
我怀疑.NET反编译器不会在这里提供帮助.
dotPeek是免费的.NET反编译器。作为独立工具时,它也是ReSharper的一部分:如果告诉ReSharper导航到class
.dll文件中的定义,它将自动反编译该文件并向您提供源代码。
我不想使用ReSharper。没有ReSharper可以得到相同或相似的功能吗?这是仅ReSharper的功能吗?
我对 dotpeek 产品有最奇怪的事情。
我从本地文件夹打开了一个旧的 dll 版本,并在 dotpeek 中看到了一些添加到新版本的代码。经过大约一天的调查,反汇编向我展示了旧代码。
有人可以向我解释如何做到这一点以及将来如何避免它。我能想到的唯一解释是新版本已加载到 GAC(全局程序集缓存)。
有人遇到过这个问题并且知道如何解决吗?
dotpeek ×10
c# ×5
.net ×4
decompiling ×4
resharper ×3
debugging ×2
decompiler ×1
ilspy ×1
syntax ×1