问题标签 [ildasm]

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.

0 投票
3 回答
772 浏览

c# - 将 C# 代码反汇编为机器指令

我正在试验编译器的性能。我有一小段代码,只是一些浮点乘法和加法。代码在循环中执行数百万次。我正在尝试用 C++、c#、java、perl、python 编译代码……然后在测量执行时间的同时运行结果。

我对 c# 的性能很不满意。我的 c# 代码比等效的 C++ 或 java 慢大约 60%。我敢肯定,我的实验中一定有一个错误。我想反汇编生成的二进制文件以了解原因。

MSIL代码有这样的选择吗?可以在机器指令级别(x86 指令,而不是 MSIL 指令)检查 c# JIT 编译器的结果吗?

更新

代码(u、v、g* 为双精度;步数为整数)

0 投票
5 回答
10725 浏览

c# - 为什么将 C# 代码编译成 IL 时会创建 .ctor()?

使用这个简单的 C# 代码,我运行csc hello.cs; ildasm /out=hello.txt hello.exe.

这是来自 ildasm 的 IL 代码。

代码有什么用.method public instance void .ctor()?它似乎没有做任何事情。

0 投票
2 回答
2174 浏览

.net - 我们可以拆卸(使用 ILDasm)一个 NGen-ed 程序集吗?

如果我NGen一个组件,ildasm仍然拆卸它是否正常?

行。我写了一个 HelloWorld 类库,随后的 dll 被命名为 NGenILDasmTest.dll。--> 针对 .Net fw 4。

从 Vs 2010 命令提示符,我做到了

我可以看到安装在 GAC 中的程序集。我运行了 ildasm 以便查看 IL。到现在为止还挺好。

然后我跑

(我没有为 ngen 指定任何选项)。这个程序集成功编译。我在文件夹下找到了一个名为 NGenILDasmTest.ni.dll 的文件

现在,当我像下面那样运行 ildasm

我可以看到 Ngen-ed 程序集的内容。这是正常的吗?。

从技术上讲,Ngen 为 IL 生成本机 CPU 指令(显然将其放在 C:\windows\Assembly\NativeImages_V4.#####_32 下 - 在我的情况下)。如果是这种情况,我如何仍然能够使用 ILDasm 将 NGen-ed 程序集视为 IL?

请帮助我理解我在这里缺少的“小东西”。

0 投票
2 回答
56 浏览

.net - 添加对编译代码的引用有什么影响?

当我添加对 .dll 文件的引用时,项目的编译输出有哪些变化?

(想象一下我添加了一个参考并重建。)

0 投票
1 回答
357 浏览

.net - 如何使用 Visual Studio 在源代码文件中定位匿名类型

在混淆 .NET 程序集(使用 Dotfuscator)的过程中,我发现自己正在调整事物的重命名方式。这通常涉及查看 ILDASM 中的程序集并将类型追溯到定义它的源代码文件。

通常这是一个简单的过程。但我发现定位匿名类型非常困难——尤其是在大型程序集中。

如果我试图查找匿名类型的位置,例如以下代码行:

编译为:

并在 ILDASM 树中显示为程序集的根。

如果我想在源代码中定位匿名类型,我将没有太多帮助:

  • 没有命名空间
  • 没有可搜索的符号
  • 解决方案导航器中没有任何内容
  • 类视图中没有任何内容
  • 对象浏览器中没有任何内容

我错过了什么吗?是否有任何工具可以帮助在代码文件中定位匿名类型?

0 投票
0 回答
1492 浏览

assemblies - 修改已构建的 .NET 程序集的版本信息

有没有更好的方法来修改我当前使用的.NET程序集的版本信息。

我目前的方法如下。

我确实用ildasm拆卸了组件:

这还将生成一个 Riolo.WebUI.res 编译的资源文件,然后我使用 Visual Studio 的用户界面打开并修改它,然后我使用ilasm重新组装程序集:

这个过程有各种各样的问题,主要是我感觉像用大炮射蚊子,然后因为我不知道如何用命令行将文件反编译.res.rc文件,我不能使用命令行脚本,因为我必须打开 Visual Studio 来修改.res文件,这意味着它非常耗时且容易出错,最后但并非最不重要的一点是,我确实觉得往返程序集很可能最终会丢失信息,即使是在不经意间,因此我担心我会在一些尚未预料到的情况下早晚被咬。

0 投票
1 回答
662 浏览

c# - ExportDll 通过 ildasm/ilasm 运行程序集后,如何获取程序集的代码覆盖率?

我在我的 C# 程序集上使用构建后步骤来公开我的 dll 中的函数签名。此步骤使用http://www.codeproject.com/KB/dotnet/DllExport.aspx中的 ExportDll 工具。但是,如果我通过 mstest 运行我的 dll 并尝试获取代码覆盖率报告,则会收到以下错误:

考虑到程序集中没有非托管代码(除了一些 P/Invoke 签名),这很奇怪。如果我采取构建后步骤,我的代码会被正确检测,并且我可以获得代码覆盖率报告。因此,我只能得出结论,它一定是这个后期构建步骤,而不是代码本身的东西。

我倾向于通过代码的非ExportDll 版本运行我的单元测试,同时构建和分发post-ExportDll 版本。由于我主要关心的是代码是否经过测试,而不是其他组件是否可以通过 DLL 导出找到该函数,因此我不认为这是一个糟糕的解决方案。但是,我觉得这可能是构建管理中的一场噩梦,不得不向团队解释“使用这个程序集,而不是那个程序集”。

有没有人有过对已通过此工具运行的 dll 进行单元测试的经验?或者,也许有人有使用 ildasm/ilasm 对已编译、反编译和重新组装的程序集进行检测的经验?

0 投票
1 回答
1464 浏览

.net - ildasm,然后是具有相同元数据的 ilasm

我们需要修补程序集,目前无法从源代码重建。我可以使用 ildasm mydll.dll /all /out=mydll.il 转储 IL,然后我可以使用 ilasm /dll mydll.il 重建它,这一切都很好,除了文件版本、公钥等都丢失了新的二进制文件。我怎样才能告诉 ilasm 添加这些?我试过 /mdv 开关但没有运气。

0 投票
1 回答
285 浏览

crash-dumps - 崩溃转储分析:如何找到导致崩溃的模块和指令

我有一个故障转储文件,我想确定发生崩溃的确切指令,更准确地说是在“System_Messaging_ni+60e4e”中,因为我怀疑是 MSMQ 问题。

我的理解是“System_Messaging_ni+60e4e”的意思是“从模块“System_Messaging_ni”开始的字节偏移量 0x60e4e 处的指令。

如何确定“System_Messaging_ni”引用的确切 DLL 文件?我在我的系统中找不到任何 System.Message.ni.dll。_ni 后缀是什么意思?如何判断偏移处的指令是 IL 还是本机代码?如果指令在 IL 中,我可以使用 ILDASM 找出确切的位置吗?

非常感谢您的帮助!

0 投票
1 回答
189 浏览

c# - .NET 运行时处理 通用代码

.NET 运行时如何处理通用代码

MSIL中是否有启用通用支持的特殊构造?

可以使用ILDASMReflection找出它吗?如果如何