【发布时间】:2018-05-31 22:26:30
【问题描述】:
我已经开始逆向工程并使用visual basic反编译器,我得到了这个,虽然它是基本的,但我唯一不明白的是(是这段代码):
loc_00405255: On Error Resume Next
loc_00405262: -1 = Time$
loc_0040526D: var_30 = On Error Resume Next
loc_00405273: edi = Date$
loc_0040527E: var_34 = var_30
var_30 会包含什么内容?
编辑 2:
因为我来自文档 here,我没有看到 On Error Resume Next 没有返回任何内容。
下面是整段代码的一部分:
Dim var_140 As Variant
loc_00405255: On Error Resume Next
loc_00405262: -1 = Time$
loc_0040526D: var_30 = On Error Resume Next
loc_00405273: edi = Date$
loc_0040527E: var_34 = var_30
loc_004052B7: var_24 = Text2.Text
loc_004052BF: var_144 = var_24
loc_00405301: var_168 = var_24
loc_00405314: var_C4 = var_168
loc_00405357: var_28 = Text1.Text
loc_0040535F: var_14C = var_28
loc_004053A8: Asc(var_28) = Asc(var_28) + 0001h
loc_004053C3: var_16C = var_30
loc_004053D6: var_54 = var_16C
loc_0040540B: var_2C = var_34
loc_00405418: var_84 = Right$(var_2C, 2)
loc_00405428: var_E4 = "Grand-Theft-Auto-Vice-City"
loc_0040543C: var_F4 = "bbidhan-ThE-Great"
loc_004054AF: var_150 = (var_168 = Chr(Asc(var_28)) & Right(var_16C, 2) & Right$(var_2C, 2) & "Grand-Theft-Auto-Vice-City" & "bbidhan-ThE-Great")
loc_0040552B: If var_150 = 0 Then GoTo loc_004057C2
loc_00405588: var_38 = Global.App
loc_0040558D: var_144 = var_38
loc_004055E5: var_24 = Global.Path
loc_004055EA: var_14C = var_24
编辑 1:
Q2. Right(var_16C, 2) & Right$(var_2C, 2)
以上两者的区别,带$符号?
【问题讨论】:
-
VB.NET 与 VBA 不同,对我来说这看起来像 VB6。你能确认哪一个是正确的吗?
-
我建议在反编译列表中加一点盐-原始代码信息在编译过程中会丢失,因此您只会与原始代码如此接近。
On Error没有返回值,所以本质上是反编译器出错了。在On Error Resume Next之后,任何异常都将被忽略,因此如果Right函数调用会抛出异常,则不会分配值,变量将保留其先前的值。 -
Right返回一个 Variant(字符串),而Right$返回一个字符串。在大多数情况下,可以忽略它们之间的差异——它们几乎是等价的(尽管不完全一样)。 -
在 Vb6 中,
On Error Resume Next是一个语句,不返回值,如 described in the VB6 docs。 [你链接到 Vb.Net 文档。] 反编译器在骗你。 -
它可能是内部变量,它保存了发生错误时要做什么。
标签: vb6 reverse-engineering decompiling