将 VB.NET exe 反编译为 C# (dotPeek & JustDecompile)
Decompile VB.NET exe to C# (dotPeek & JustDecompile)
所以我有一个程序是从 VB.NET 构建的,但没有源代码并且不可能获得源代码,我需要修改程序所以我使用 dotPeek 和 JustDecompile 反编译它到 C#,因为我可以用 C# 编写代码,但我从未真正学习过 VB.NET(我也尝试使用 JustDecompile 反编译为 VB.NET,但对我来说它看起来比 C# 更混乱)。但是反编译的项目充满了我在尝试将 C# exe 和 dll 反编译为 C# 项目时看不到的奇怪代码。它充满了看起来不应该存在的代码(看起来像是幕后代码),例如:
private static List<WeakReference> __ENCList;
lock (finvendor.__ENCList)
finvendor.__ENCList.Add(new WeakReference((object) this));
[AccessedThroughProperty("controlname")] //for every controls
它也充满了我在 C# 中找不到的每个控件的此类代码:
internal virtual CheckEdit chkNonAktif
{
[DebuggerNonUserCode] get
{
return this._chkNonAktif;
}
[DebuggerNonUserCode, MethodImpl(MethodImplOptions.Synchronized)] set
{
EventHandler eventHandler = new EventHandler(this.chk_CheckedChanged);
if (this._chkNonAktif != null)
this._chkNonAktif.CheckedChanged -= eventHandler;
this._chkNonAktif = value;
if (this._chkNonAktif == null)
return;
this._chkNonAktif.CheckedChanged += eventHandler;
}
}
它使用的是 Devexpress 版本 10,这些代码是因为那个吗?是否正常,或者我可以删除这些代码吗?
您有 VB Winform 项目的调试版本。弱引用内容由调试器使用,不会为发布版本发出。
VB 为每个 Dim WithEvents ControlName As ControlType
创建一个 属性,其中还有一个用 Handles ContolName.EventName
修饰的方法。 属性 setter 包含使 处理事件 工作的事件连接代码。
例如一个按钮和它的点击事件。
Friend WithEvents Button1 As Button
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
'some code
End Sub
将导致生成此 属性:
Friend Overridable Property Button1 As Button
<CompilerGenerated> _
Get
Return Me._Button1
End Get
<MethodImpl(MethodImplOptions.Synchronized), CompilerGenerated> _
Set(ByVal WithEventsValue As Button)
Dim handler As EventHandler = New EventHandler(AddressOf Me.Button1_Click)
Dim button As Button = Me._Button1
If (Not button Is Nothing) Then
RemoveHandler button.Click, handler
End If
Me._Button1 = WithEventsValue
button = Me._Button1
If (Not button Is Nothing) Then
AddHandler button.Click, handler
End If
End Set
End Property
您可能还会有许多 类 的名称以 My_XYZ 的形式支持 VB 的应用程序框架。
我建议您使用一些 controls/event 处理程序创建一个新的 VB WinForm 项目,然后对其进行反编译,以便您可以看到反编译器如何重现样板文件内容来自 IL。一旦你知道了模式,就会容易很多。
我的这个答案可以帮助人们理解问题并找到自己的解决方案。
- 只需创建您自己的小应用程序,然后将其编译为
.exe 文件。
- 然后使用您使用的相同反编译器反编译此 .exe 文件。
- 现在你在那里看到了同样的奇怪代码,你知道你没有把它放在那里。
谢谢。
所以我有一个程序是从 VB.NET 构建的,但没有源代码并且不可能获得源代码,我需要修改程序所以我使用 dotPeek 和 JustDecompile 反编译它到 C#,因为我可以用 C# 编写代码,但我从未真正学习过 VB.NET(我也尝试使用 JustDecompile 反编译为 VB.NET,但对我来说它看起来比 C# 更混乱)。但是反编译的项目充满了我在尝试将 C# exe 和 dll 反编译为 C# 项目时看不到的奇怪代码。它充满了看起来不应该存在的代码(看起来像是幕后代码),例如:
private static List<WeakReference> __ENCList;
lock (finvendor.__ENCList)
finvendor.__ENCList.Add(new WeakReference((object) this));
[AccessedThroughProperty("controlname")] //for every controls
它也充满了我在 C# 中找不到的每个控件的此类代码:
internal virtual CheckEdit chkNonAktif
{
[DebuggerNonUserCode] get
{
return this._chkNonAktif;
}
[DebuggerNonUserCode, MethodImpl(MethodImplOptions.Synchronized)] set
{
EventHandler eventHandler = new EventHandler(this.chk_CheckedChanged);
if (this._chkNonAktif != null)
this._chkNonAktif.CheckedChanged -= eventHandler;
this._chkNonAktif = value;
if (this._chkNonAktif == null)
return;
this._chkNonAktif.CheckedChanged += eventHandler;
}
}
它使用的是 Devexpress 版本 10,这些代码是因为那个吗?是否正常,或者我可以删除这些代码吗?
您有 VB Winform 项目的调试版本。弱引用内容由调试器使用,不会为发布版本发出。
VB 为每个 Dim WithEvents ControlName As ControlType
创建一个 属性,其中还有一个用 Handles ContolName.EventName
修饰的方法。 属性 setter 包含使 处理事件 工作的事件连接代码。
例如一个按钮和它的点击事件。
Friend WithEvents Button1 As Button
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
'some code
End Sub
将导致生成此 属性:
Friend Overridable Property Button1 As Button
<CompilerGenerated> _
Get
Return Me._Button1
End Get
<MethodImpl(MethodImplOptions.Synchronized), CompilerGenerated> _
Set(ByVal WithEventsValue As Button)
Dim handler As EventHandler = New EventHandler(AddressOf Me.Button1_Click)
Dim button As Button = Me._Button1
If (Not button Is Nothing) Then
RemoveHandler button.Click, handler
End If
Me._Button1 = WithEventsValue
button = Me._Button1
If (Not button Is Nothing) Then
AddHandler button.Click, handler
End If
End Set
End Property
您可能还会有许多 类 的名称以 My_XYZ 的形式支持 VB 的应用程序框架。
我建议您使用一些 controls/event 处理程序创建一个新的 VB WinForm 项目,然后对其进行反编译,以便您可以看到反编译器如何重现样板文件内容来自 IL。一旦你知道了模式,就会容易很多。
我的这个答案可以帮助人们理解问题并找到自己的解决方案。
- 只需创建您自己的小应用程序,然后将其编译为 .exe 文件。
- 然后使用您使用的相同反编译器反编译此 .exe 文件。
- 现在你在那里看到了同样的奇怪代码,你知道你没有把它放在那里。
谢谢。