问题标签 [ilasm]

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 投票
1 回答
1430 浏览

.net-core - 如何使用.NET Core 2.0 ilasm.exe?

我正在尝试https://www.nuget.org/packages/runtime.win-x64.Microsoft.NETCore.ILAsm/(根据Win 10 Pro x64 PC 上Where is ilasm.exe in Microsoft.NETCore.ILAsm? ) . 什么都没发生。

无论我使用什么语法,仍然没有。例如,我的输入没有生成 .dll,控制台中也没有打印任何内容。

即使我只是运行“ilasm”(无参数),也不会产生任何输出。它保持完全沉默。同时,如果我运行较旧的 C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe,它总是会产生一些输出(例如,参数使用参考)。

我应该如何将这个最新的 ilasm.exe 用于 .NET Core 2.0?它有不同的命令行参数吗?或者,也许,我需要一些额外的文件才能让它工作(尽管这个包除了 ilasm.exe 本身没有任何意义)?

0 投票
3 回答
993 浏览

c# - 为什么这个非常简单的 C# 方法会产生如此不合逻辑的 CIL 代码?

我最近一直在研究 IL,我注意到 C# 编译器的一些奇怪行为。以下方法是一个非常简单且可验证的应用程序,它会立即以退出代码 1 退出:

当我使用 Visual Studio Community 2015 编译它时,会生成以下 IL 代码(添加了注释):

如果我要手写这个方法,似乎可以使用以下 IL 实现相同的结果:

是否有我不知道的潜在原因使这成为预期的行为?

还是只是组装后的 IL 目标代码进一步优化,所以 C# 编译器不必担心优化?

0 投票
1 回答
226 浏览

.net - `ldstr` 指令使用哪种类型的常量?

我正在阅读.NET IL Assembler书。书中有一段话:

`ldstr` "Enter a number"是从指定的字符串常量创建字符串对象并将对该对象的引用加载到堆栈上的指令。在这种情况下,字符串常量存储在元数据中。您可以将此类字符串称为公共语言运行时字符串常量元数据字符串常量。您可以用另一种方式存储和处理字符串常量,稍后将解释,ldstr只处理公共语言运行时字符串常量,它们始终以 Unicode (UTF-16) 格式存储。

我看到作者写道,可以将string其称为公共语言运行时字符串常量元数据字符串常量。虽然我不明白这些选项之间的区别,但我的问题是关于其他的......

此外,作者写了两次关于ldstr指令对字符串的使用,每次都是其他的(我用粗体选择了它)。

那么团队使用哪种类型的常量呢?它是公共语言运行时字符串常量吗?还是元数据字符串常量?

0 投票
1 回答
391 浏览

c# - 在运行时修改导致 InvalidProgramException 的 IL 代码

我试图在 IL 代码中删除对 Tick 事件的订阅,以便它永远不会触发。

这是IL代码:

所以我在想我应该能够删除最后两行来删除订阅,它应该没问题。

我成功编译了 IL 代码:

现在,当我尝试启动程序时,它会引发异常:

如果我在没有任何修改的情况下编译 IL,那么程序将毫无例外地运行,因此我正在做出更改。

0 投票
1 回答
92 浏览

decompiling - ildasm / ilasm - 赛门铁克误报

我在拆卸和重新组装 .NET 可执行文件时遇到问题,之后它会抛出误报。

我得到的具体错误是:

Heur.AdvML.B

截至目前,我不再在重新编译之前编辑 asm。我从字面上反编译并重新编译它,运行它并得到错误。我知道我可以尝试联系我的网络管理员以从“监视”列表中删除一个文件夹,并尝试联系赛门铁克。

理想的情况是,如果有人可以帮助我确定发生这种情况的确切原因。

我尝试过的事情:

完全从 asm 中删除所有调试引用 Set System.Diagnostics.DebuggableAttribute/DebuggingModes 为 01 00 02 00 00 00 00,这应该是发布优化的指标反编译并重新编译已知的工作 exe 而无需触摸它

exe如果原件是干净的,是什么导致了这种误报。我需要签名exe吗?真的很困惑任何帮助将不胜感激。

0 投票
1 回答
11541 浏览

c# - ILDASM和ILASM,如何使用它们?

我很难尝试使用 Visual Studio 命令提示符(反)组装 dll,看起来不像我在 microsoft page 中看到的那么简单。

我以这些方式使用 ildasm:

我得到:无法打开“MyLibrary.il”进行输出。

我还尝试了完整路径:

我得到:指定的多个输入文件

使用 ildasm GUI 实际上可以工作,但是当我使用 ilasm 时:

我得到:无法打开 'myLibrary.il',当我使用完整路径时,我得到了同样的错误。

这里有什么问题?

0 投票
1 回答
64 浏览

cil - LocalVarSig 可以有多个约束属性吗?

在 LocalVarSig 语法图中,CustomMod 和 Constraint 元素处于循环中,因此这意味着可以有多个 Constraint 元素。如果有多个 Constraint 元素,它的语义是什么?谢谢!

0 投票
0 回答
595 浏览

c# - 如何使用 dnlib 添加对 MessageBox.Show() 的调用?

我正在尝试从 dnlib 调用 MessageBox.Show。我有这个函数可以找到 Show 方法:

这就是我使用它的方式:

当我运行它时,当它尝试将模块写入文件时出现此异常。任何人都可以看看并解释我做错了什么吗?

0 投票
0 回答
51 浏览

.net - 在 IL 中添加 int32 和 int64 的正确性

在使用 IL 代码的自定义解释器时,我注意到以下代码可以编译ilasm.exe并很好地执行:

但在 ECMA-335 中(不幸的是,我无法插入指向 html 的链接,似乎只有pdfint32可用)我看到二进制操作不支持和int64的组合(如表 III.2 所示:二进制数字操作)。

另外添加float32int64可以编译执行。

这是.net运行时的错误吗?

如何检查哪些组合是真正正确的并且应该被支持?

0 投票
1 回答
165 浏览

f# - 有没有办法从 F# 代码运行 ILASM?

我正在用 F# 制作从 Java (一小部分)到 CIL (MSIL) 的编译器,我正在考虑为实际编译部分编写一些单元测试。有没有办法可以在生成的 IL 代码上运行 ilasm 并从单元测试中运行 .exe 文件?我正在使用 NUnit。

具体来说,有没有办法做到以下几点?