问题标签 [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.
dll - ildasm 引用第三方 DLL 中的内部类
讨厌的家伙,
一个问题困扰了我几天,我想可能是时候与社区分享它了。
我需要对公司的一个旧项目进行更改。此 Dll 引用第三方 dll 并使用该 DLL 中的内部类。引用的 Dll 将此文件声明为朋友或将 InternalVisibleTo 设置为此文件名和 publicToken。
现在,我希望引用的 dll 允许我访问它的内部内容,但是在我的项目中,我收到错误“'BlaBla' 由于其保护级别而无法访问”,这清楚地表明它不允许我从一个访问内部类新的DLL。
到目前为止我尝试过的解决方案:
在引用的 DLL 和文件 InternalVisibleTo 部分的 il 文件中使用了 Ildasm,我删除了整个 PublicTokenKey。Ilasm 再次,但没有成功。
为我的 dll 创建了一个新的强类型名称,与之前的名称相同,但它不起作用。
伊拉斯姆 foo.dll /dll
所以现在我被留在这里无法再进一步了。我非常感谢与此问题相关的任何帮助或讨论。
PS:我想分享一个非常相似的问题,我逐行跟进,但它不起作用 https://stackoverflow.com/a/12202623/861489
c# - .NET Core 中的 *deps.json 文件
.NET Core 中 *deps.json 文件的用途是什么?将引用存储在此类文件中而不是程序集清单中的原因是什么(如在独立的 .NET Framework 中)?
使用 Ildasm 我检查了程序集清单在 dotnet build 命令之后不包含这些依赖项的条目。
但它在 dotnet publish 命令之后有条目。
c# - 代码。反编译后的荒谬说法
考虑我有以下代码:
当我反编译它时:
如果这完全没有意义,为什么还要额外添加呢?
ILDasm 生成的 ILCode:
c# - 为什么这个非常简单的 C# 方法会产生如此不合逻辑的 CIL 代码?
我最近一直在研究 IL,我注意到 C# 编译器的一些奇怪行为。以下方法是一个非常简单且可验证的应用程序,它会立即以退出代码 1 退出:
当我使用 Visual Studio Community 2015 编译它时,会生成以下 IL 代码(添加了注释):
如果我要手写这个方法,似乎可以使用以下 IL 实现相同的结果:
是否有我不知道的潜在原因使这成为预期的行为?
还是只是组装后的 IL 目标代码进一步优化,所以 C# 编译器不必担心优化?
c# - C# dnlib / IL 代码 - 创建一个新字典
我正在创建自己的程序来通过 dnlib 更改 .exe 代码。
然后我想通过 IL 和 Dnlib 代码创建一个字典。
但是两者的教程都不多,所以很难。
它编写了错误的字典代码并使 DnSpy 崩溃。
我的代码:
任何帮助都非常感谢,谢谢!
.net - `ldstr` 指令使用哪种类型的常量?
我正在阅读.NET IL Assembler书。书中有一段话:
`ldstr` "Enter a number"
是从指定的字符串常量创建字符串对象并将对该对象的引用加载到堆栈上的指令。在这种情况下,字符串常量存储在元数据中。您可以将此类字符串称为公共语言运行时字符串常量或元数据字符串常量。您可以用另一种方式存储和处理字符串常量,稍后将解释,但ldstr
只处理公共语言运行时字符串常量,它们始终以 Unicode (UTF-16) 格式存储。
我看到作者写道,可以将string
其称为公共语言运行时字符串常量或元数据字符串常量。虽然我不明白这些选项之间的区别,但我的问题是关于其他的......
此外,作者写了两次关于ldstr
指令对字符串的使用,每次都是其他的(我用粗体选择了它)。
那么团队使用哪种类型的常量呢?它是公共语言运行时字符串常量吗?还是元数据字符串常量?
c# - 在运行时修改导致 InvalidProgramException 的 IL 代码
我试图在 IL 代码中删除对 Tick 事件的订阅,以便它永远不会触发。
这是IL代码:
所以我在想我应该能够删除最后两行来删除订阅,它应该没问题。
我成功编译了 IL 代码:
现在,当我尝试启动程序时,它会引发异常:
如果我在没有任何修改的情况下编译 IL,那么程序将毫无例外地运行,因此我正在做出更改。
decompiling - ildasm / ilasm - 赛门铁克误报
我在拆卸和重新组装 .NET 可执行文件时遇到问题,之后它会抛出误报。
我得到的具体错误是:
Heur.AdvML.B
截至目前,我不再在重新编译之前编辑 asm。我从字面上反编译并重新编译它,运行它并得到错误。我知道我可以尝试联系我的网络管理员以从“监视”列表中删除一个文件夹,并尝试联系赛门铁克。
理想的情况是,如果有人可以帮助我确定发生这种情况的确切原因。
我尝试过的事情:
完全从 asm 中删除所有调试引用 Set System.Diagnostics.DebuggableAttribute/DebuggingModes 为 01 00 02 00 00 00 00,这应该是发布优化的指标反编译并重新编译已知的工作 exe 而无需触摸它
exe
如果原件是干净的,是什么导致了这种误报。我需要签名exe
吗?真的很困惑任何帮助将不胜感激。
c# - ILDASM和ILASM,如何使用它们?
我很难尝试使用 Visual Studio 命令提示符(反)组装 dll,看起来不像我在 microsoft page 中看到的那么简单。
我以这些方式使用 ildasm:
我得到:无法打开“MyLibrary.il”进行输出。
我还尝试了完整路径:
我得到:指定的多个输入文件
使用 ildasm GUI 实际上可以工作,但是当我使用 ilasm 时:
我得到:无法打开 'myLibrary.il',当我使用完整路径时,我得到了同样的错误。
这里有什么问题?
c# - 手动签署第 3 方 dll 会丢失文件详细信息
我已经使用这些步骤签署了第 3 方 C# .Net Dll:https ://blogs.msdn.microsoft.com/miah/2008/02/28/how-to-assign-a-strong-name-to-an -unsigned-3rd-party-大会/
使用这些步骤:
但我注意到现在签名的输出 dll 丢失了所有原始文件详细信息:
如何保留原始文件详细信息?