问题标签 [ilspy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
wif - 为什么我无法反编译 System.IdentityModel.Services.dll?
我正在尝试反编译System.IdentityModel.Services.dll
,但没有一个反编译工具显示方法详细信息
我什至无法在 ILDASM 中获得这些方法的 IL。ILSpy 也是如此。
例如: System.IdentityModel.Services.SessionAuthenticationModule
伊尔达斯姆:
我原以为至少 IL 总是可用的。不是这样吗?
dll - 如何使用 ILSpy 从资源中获取图像
我不知道这是否是一个有效的问题。但是,我有点好奇如何在 any 的资源中获取图像或图标dll
。
谁能告诉我该怎么做?
我正在使用dll
资源中有很多图标的地方。
c# - 以“1”结尾的变量在 ILSpy 中删除了“1”。为什么?
为了探索 C# 编译器如何优化代码,我创建了一个简单的测试应用程序。每次测试更改时,我都会编译应用程序,然后在 ILSpy 中打开二进制文件。
我刚刚注意到一些对我来说很奇怪的东西。显然这是故意的,但是,我想不出编译器会这样做的充分理由。
考虑以下代码:
毫无意义的代码,但我写这个是为了看看 ILSpy 将如何解释这些if
语句。
然而,当我编译/反编译这段代码时,我确实注意到了一些让我摸不着头脑的东西。我的第一个变量test_1
被优化为test_
!C# 编译器这样做有充分的理由吗?
为了全面检查,这是Main()
我在 ILSpy 中看到的输出。
更新
显然,在检查了 IL 之后,这是 ILSpy 的问题,而不是 C# 编译器的问题。Eugene Podskal 对我最初的评论和观察给出了很好的回答。但是,我很想知道这是否是 ILSpy 中的一个错误,或者这是否是故意的功能。
c# - 在 dotPeek 中反编译 .NET Framework v4.5 可执行文件“不是 .NET 程序集文件”,但可执行文件运行良好
一个客户与他们以前的开发人员建立了桥梁,我正试图从他们的工资单可执行文件中提取源代码,不幸的是,作为一名网络开发人员,我对 .NET 框架没有太多经验。
编辑:我们的客户合法拥有该软件,但没有要求源代码,开发人员没有回应我们的通信。我在 SO 上提出这个问题的意图不是为了法律建议(我们已经有人处理),而是为了任何可用于反编译的选项。
我之前用 JetBrains dotPeek 成功地反编译了可执行文件,但是它们都运行了.Net Framework v2.0/v4.5
框架。我目前正在使用的客户工资单可执行文件运行.Net Core v4.5
,它无法被 dotPeek、ILSpy 或我作为 .NET 程序集文件运行的其他 C# 反编译软件识别。
经过一番研究,我相信.Net Core
它最近是开源的......但是我不确定如何继续进行反编译过程,或者此时是否有可能。有什么建议吗?
注意:我将接受“无法反编译,但您是否先尝试过 X、Y、Z?”的答案。我需要让客户知道是否可以完成,因为我们的日程安排很紧。
我所做的一些澄清:program.exe
在dotPeek中打开,右键单击属性给了我这个:
它声称“不是 .NET 程序集文件”,但我可以正常运行可执行文件。
编辑:是否可以从可执行文件中提取更多信息,以便我可以缩小另一种反编译方法?
我怀疑.NET 反编译器在这里没有帮助。
c# - 如果 Task.Delay 未标记为异步,它如何等待?
我正在查看Task.Delay(int)
ILSpy 中的反编译:
这种方法的使用类似于await Task.Delay(5000);
,智能感知甚至说“(等待)”:
那么Task.Delay(int)
没有标记async
(public static async Task Delay(int millisecondsDelay)
)是怎么回事?
c# - 使用相同的代码实现时无法模仿 ConcurrentStack 的性能
我正在学习编写并发数据结构并将ConcurrentStack实现视为学习练习。作为起点,我创建了 ConcurrentStack 实现的副本,使用IlSpy将其反编译为 C#。我暂时只限于调查和使用 Push 和 TryPop 方法。
但是我的实现比使用原始实现要慢得多。
我的测试使用 4 个线程(在单个插槽上,4 核 CPU),每个线程针对不同内核的线程亲和性。每个线程执行 1,000,000 次循环,每个循环执行 3 次推送和 3 次弹出。多次运行测试完成所有线程的平均时间是......
- 并发堆栈 => 445 毫秒
- Push/TryPop 的克隆 => 670ms
因此,据我所知,即使代码在两者之间是相同的,但克隆的速度却慢了大约 50%。我一次运行 500 次测试,并取所有运行的平均值。所以我不认为问题是代码的初始 JIT'ing。
任何想法为什么方法的副本会慢得多?
C# 实现
(为了完整起见,我提供了可用于复制结果的 C# 控制台应用程序代码。对于任何有兴趣查看他们是否获得与我相同的结果的人。)
c# - 为方法调用生成代码。生成的 C# 代码显示了比 IL 代码中实际声明的更多的局部变量?
我正在创建一个开放实例委托,DynamicMethod
以调用某个目标上的方法。代码通过 ref 参数以及静态方法进行处理。
请参阅以下内容:
DelegateForCall
返回一个开放实例委托,以在给定一些参数ByRef
的对象上调用方法。Test
因此可以推断出它的定义:
但它实际上是强类型的(我同时处理强目标和弱目标)所以它实际上看起来像这样:
代码按预期工作。我将向您展示我用来生成调用方委托的代码,但首先让我展示我期望它生成的内容。DelegateForCall
基本上返回DelegateForCall<object, object>
,所以它是弱类型的,在这种情况下,我希望它生成以下内容:
不幸的是,查看我在 ILSpy 中生成(用于调试目的)的测试程序集中生成的代码会显示以下 C# 代码:
我无法理解它为什么声明arg_39_0
并且arg_39_2
- 在我的代码中,我声明了一个本地来存储目标,并声明一个本地来从args
数组中获取值。所以总的来说,我们应该看到 4 个本地人。
这是我正在使用的代码:
'emit' 基本上是我用来发出操作码的助手(来源)
最后,这是 ILSpy 中显示的 IL 代码,它似乎与我预期的 C# 更一致,而不是它实际生成的 C#(具有两个额外冗余局部变量的那个)
请注意它如何清楚地说明有 4 个局部变量,但 ILSpy C# 显示 6 个!
注意生成的程序集通过了peverify
验证。
为什么 ILSpy 中的 C# 看起来不像我想的那样?为什么它显示有 6 个局部变量,而实际上只有 4 个?
编辑:这是 dotPeek 显示的,更奇怪的是......
.net - ICSharpCode Decompiler 从 TypeReferenceExpression 到 TypeDeclaration?
我正在使用ICSharpCode.Decompiler.Ast.AstBuilder
(由 SharpDevelop、NRefactory 和 ILSpy 在后台使用;也从那里获得灵感)从代码中使用 .NET 通用中间语言程序集构建抽象语法树。
TypeReferenceExpression
只要有行 like ,语法树就会包含s Math.Abs()
。TypeDeclaration
当引用类型也存在于同一语法树中时,如何检索它?
我得到的最接近的是TypeReferenceExpression.Type.ToTypeReference().Resolve()
,但编排起来非常繁重,而且我已经(我想)拥有语法树中的所有信息。我还尝试使用命名空间和标识符进行手动查找,但我想应该有更好的方法。
c# - 如何使 ILspy c# 反编译结果具有更好的格式?
ILspy 是一个了不起的工具,但是当我使用它反编译 dll 时,我得到了这样的结果:
但它应该是这样的:
我怎样才能得到更好的结果?
更多这样的例子:
应为:
但我们得到的是:
当我们构建时会出现如下错误:
.net - 如何从 MSIL 或 .NET PE 文件中提取资源内容
请检查图片链接,我需要从 MSIL 文件中提取资源内容。我已经使用 ILSpy 调试了该文件,但我需要以任何其他方式进行调试。不使用任何人工干预。