问题标签 [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 投票
2 回答
440 浏览

linq - 紧凑框架的 ILASM?

我在 Compact Framework 上使用 Linq 表达式树(来自 db4o/Mainsoft/Mono 端口)。由于 System.Reflection.Emit 不存在,我无法将我的 LambdaExpressions 编译为委托,出于性能原因我想这样做。

我想也许我可以将我的表达式树转换为 IL 并基本上以这种方式提供缺少的 Emit 功能,但后来我意识到我必须在其上运行基于 WinCE 的 ILASM 或编写我自己的 PE 标头和汇编元数据。

我更希望 ILASM 可用。是吗?

0 投票
1 回答
6409 浏览

c# - 伊斯兰教的问题

我在 .net 3.5 SP1 中有一个相当大的程序,它编译得很好。但是,当我想用​​ Obfuscator Pro 混淆它(现在评估)时,Obfuscator 停止并出现以下错误:

[构建输出] 此应用程序已请求运行时以不寻常的方式终止它。
[构建输出] 请联系应用程序的支持团队以获取更多信息。
[构建输出] ilasm 返回 3
[构建输出] 构建错误。

由于错误来自 ILASM,我想让我们做 Obfuscator 所做的事情(没有混淆)并执行以下命令:

=> ildasm.exe /OUT=C:\MyApp.exe.il /TEXT /NOBAR /RAWEH /QUOTEALLNAMES /UTF8 /LINENUM /FORWARD C:\MyApp\bin\Release\MyApp.exe
=> ilasm C:\MyApp. exe文件

第一个命令 (ILDASM) 通过就好了,我得到一个 450MB 的 IL 文件。
然而,第二个命令 (ILASM) 崩溃并出现以下错误:

此应用程序已请求运行时以不寻常的方式终止它。
请联系应用程序的支持团队以获取更多信息。

有谁知道错误可能是什么?
我的系统是 Windows 7 x64,带有 Visual Studio 2008 (SP1) 中的工具。

更新:
我联系了混淆器支持并为他们做了一些测试。顺便说一句,他们那里有非常乐于助人的人。
我们发现该错误仅在使用 .net 2.0 框架文件夹中的 x86 ILASM 时发生。使用 framework64\v2.0... 中的那个时,不会发生错误。
此外,当使用 .net 4.0(Beta 2)中的(x86 或 x64)ILASM 时,它通过就好了。
所以这看起来真的像 .net 2.0 for x86 的 ILASM 中的一个错误。

0 投票
2 回答
1585 浏览

.net - .NET 编译器 - 来自非托管 C++ 的 CLR 程序集元数据访问/反射

我有一个针对 .NET 运行时 (CLR) 的编译器。当前版本的编译器是用标准 C++(非托管)编写的。编译器目前不支持在编译时引用程序集,因此我“导入”.NET 库的方式是使用用 .NET 编写的实用程序存根生成器,它反映任何程序集并以我的自定义语言为它发出签名存根. 我为我使用的所有 .NET 程序集预先生成了存根。在编译时,我的编译器编译存根文件以填充符号表等,以便它可以解析来自 .NET API 的类型和方法。那是我的“使用”版本。然而,这是暂时的,现在我想向编译器添加一个实际的“使用”或“导入”指令。我需要在编译时访问引用程序集中的元数据/类型信息。

我的问题:我需要有关如何从非托管 C++ 访问 CLR 程序集元数据的建议。或者,我需要证明将其转换为托管 C++ 应用程序并使用 .NET 反射支持。纯 C++ 的目的是我也可以在 Linux 上为 Mono 编译,此外,我还为除 CLR 之外的另一个运行时提供部分后端。

0 投票
2 回答
2109 浏览

c# - 在运行时使用 .NET 3.5 和 C# 从文件编译 IL 代码

我想获取一个 IL 文件,并在运行时将其编译回 exe。

现在我可以使用 process.start 通过参数 (ilasm.exe) 启动命令行,但我想从我将创建的 C# 服务中自动化这个过程。

有没有办法通过反射和反射.emit 做到这一点?

虽然这有效:

这并不理想,因为我真的希望这是一个简化的过程。

我已经看到了在运行时创建 IL 然后保存的示例,但是我需要使用我已经以文件形式拥有的 IL 并将其编译回 exe。

谢谢。

0 投票
1 回答
558 浏览

.net - 在 CIL 中定义自定义属性

为了用自定义属性装饰成员,在 CIL 中定义数组文字的语法是什么?

我正在用 CIL 编写一些 .NET 代码(使用 ilasm.exe 编译它),我需要用自定义属性装饰一个方法。该属性的构造函数将整数数组作为其唯一参数。我怎样才能在 CIL 中做到这一点?

这是自定义属性构造函数的签名(我无法更改):

如果我用 C# 编写,这就是我如何装饰我的方法(但我不能):

使用 ildasm.exe 查看编译后的 C#(尝试通过逆向工程来理解)给了我一个丑陋且无法使用的二进制文字。我尝试改用 Reflector.NET,它看起来好多了,但 ilasm.exe 在关键字“new”处引发语法错误,所以我不能使用它:

0 投票
1 回答
77 浏览

.net-3.5 - 拆卸和重新组装 .net 程序时缺少图形

我有一个软件。当我反汇编PE文件时

我得到一堆文件,比如foo.MainFormfoo.bar.dll. 然后当我尝试重新组装文件时

我又得到了一个正常工作的 foo.exe,但新文件中缺少一些小图形(它也小了约 200kb)。其他一些图形正在工作,所以看起来我在拆卸或重新组装时遗漏了一些东西。我怎样才能解决这个问题?

0 投票
1 回答
2649 浏览

.net - .NET Framework 4 ILASM 目标框架 2

问题:我需要创建、使用ILASM.EXE框架 2.0 程序集。

到目前为止,我已经看到 fw 2 ilasm: 创建 2.0 程序集。另一方面,FW 4 ilasm:创建 4.0 程序集。

到目前为止,我很酷。

现在我需要知道:有没有一种方法(也许是一个论点)可以用来制作 fw 4 ilasm 来创建 fw 2 程序集?

0 投票
2 回答
1908 浏览

.net - 如何在保留其程序集元数据的同时对外部 DLL 进行强签名?

我在项目中使用了一些未签名的库。因为我的应用程序是强签名的,所以库也必须如此。

我使用以下方法签署这些库:

问题是任何元数据,例如版本号,都会在现在签名的 DLL 中丢失。这是一个问题,因为现在库之间的一些依赖关系被破坏了。如何在不求助于实际编译这些库的源代码的情况下保留版本号?

更新

它实际上是一个显示此问题的特定 DLL,我发现它是使用 ILMerge 构建的。也许这是造成问题的原因。需要明确的是:ILMerge 生成的 DLL 确实具有正确的元数据,只有在对其进行拆卸和重新组装后,元数据才会消失。

更新 2

我在 Reflector 中打开了 DLL,看来至少版本号还在。我一直在使用 Windows 资源管理器中的文件属性对话框/详细信息选项卡进行检查。所以我认为这是缺少的清单。

0 投票
2 回答
2994 浏览

visual-studio - 是否有任何从 Visual Studio 项目中编译 CIL 代码的示例

我意识到有人询问并回答了 Visual Studio 不支持 CIL/MSIL 项目。MSBuildContrib项目有一个ILASM任务,允许您在构建时编译 IL 文件。

谷歌上没有关于如何使用此任务的示例。

有没有使用 ILASM 作为 Visual Studio 解决方案一部分的示例?我意识到#develope 和 ILIDE 支持 CIL...这里的目标是编译一些 CIL 文件作为 Visual Studio 解决方案的一部分

0 投票
3 回答
408 浏览

c# - MASM 汇编语言和 ILASM 的关系(如果有的话)是什么?

MASM 汇编语言和 ILASM 的关系(如果有的话)是什么。有一对一的转换吗?我试图将 Quantum GIS 整合到一个程序中,我一边写一边写!我的计算机上有 GIS,我有 RedGate Reflector,它和 Visual Studio 2008 的对象浏览器都无法打开 Quantum 中的 .dll 的一个(其中几个我对它们的行为方式没有明确的线索)。我使用了 MASM 程序集编辑器并“打开”了同一个 dll,它吐出了一些我一开始没想到一定会理解的东西。我如何/如何将相同的“代码”转换为我可以在 ILASM 中与之交互的东西,并且我因此假设在 Csharp 中?非常感谢您阅读以及对早期问题的所有回复......请记住我对 Csharp 编程相对较新,