c# – 反编译VB.Net程序集会生成带有无效成员变量名的代码;名称以$STATIC $开头

c# – 反编译VB.Net程序集会生成带有无效成员变量名的代码;名称以$STATIC $开头,第1张

概述我正在为一个丢失了其VB.Net WinForms应用程序源代码的客户端工作.他们拥有的组件根本没有混淆.我试图恢复尽可能多的源代码作为C#源,并尝试了几种反编译程序集的工具,包括Reflector,ILSpy和JustDecompile(所有最新版本),但它们都产生了大量错误的代码他们.由于生成的代码中存在大量错误,我将询问具体的错误(在不同的问题中),希望得到更直接的答案,并以此方式尝试解释为 我正在为一个丢失了其VB.Net WinForms应用程序源代码的客户端工作.他们拥有的组件根本没有混淆.我试图恢复尽可能多的源代码作为C#源,并尝试了几种反编译程序集的工具,包括Reflector,ILSpy和JustDecompile(所有最新版本),但它们都产生了大量错误的代码他们.由于生成的代码中存在大量错误,我将询问具体的错误(在不同的问题中),希望得到更直接的答案,并以此方式尝试解释为什么所有工具都难以反编译这个集会.

这个问题涉及这样一个事实,即所有这些工具生成的代码总是有大量无效的成员变量(字段),如下所示:

private short $STATIC$Report_Print211C1280B1$nHeight;private ArrayList $STATIC$Report_Print211C1280B1$oColumnlefts;private StaticLocalinitFlag $STATIC$Report_Print211C1280B1$oColumnlefts$Init;

有人可以解释为什么生成的代码有这些无效的成员变量以及我如何解决这些变量?

解决方法 这些是由VB.NET编译器生成的用于实现Static关键字的标识符.例如:

Class Example    Public Sub test()        Static lookhere As Integer = 42    End SubEnd Class

生成这个IL:

.fIEld private specialname int32 $STATIC$test01$lookhere.fIEld private specialname class [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StaticLocalinitFlag $STATIC$test01$lookhere$Init

通过在字段名称中使用保留字母,编译器可以确保永远不会与另一个字段发生意外冲突.在C#语言中没有与Static直接等价的东西.您可以将它们保留为类中的私有字段,但您必须注意初始化. $Init标志的目的,而不是很多确保变量被正确初始化的IL.您需要手动重命名它们.

总结

以上是内存溢出为你收集整理的c# – 反编译VB.Net程序集会生成带有无效成员变量名的代码;名称以$STATIC $开头全部内容,希望文章能够帮你解决c# – 反编译VB.Net程序集会生成带有无效成员变量名的代码;名称以$STATIC $开头所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1225360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存