【发布时间】:2019-09-27 08:17:14
【问题描述】:
我一直在我正在查看的 vb 代码中看到对特定值的引用,并想知道是否有人对它的重要性有任何线索。
var_ret_1 = Int((6.37066138261923E-314 / 32))
和
loc_0046BBAE: Var_Ret_2 = CDbl((6.37066138261923E-314 - 6.37066138261923E-314))
loc_0046BBC4: fcomp real8 ptr var_5C
loc_0046BBE3: Err.Raise
loc_0046BBE9:
loc_0046BBF5: If word ptr [ecx] < 0 Then GoTo loc_0046BBFD
loc_0046BBF7: Err.Raise
loc_0046BBFD:
loc_0046BC00: shl eax, 04h
loc_0046BC03: edi+edi*4 = edi+edi*4 - word ptr var_28
loc_0046BC0E: shl eax, 04h
loc_0046BC11: esi+esi*4 = esi+esi*4 - word ptr [ecx]
loc_0046BC38: Var_Ret_3 = CDbl((6.37066138261923E-314 - 6.37066138261923E-314))
loc_0046BC4E: fcomp real8 ptr var_68
loc_0046BC6F: edi = word ptr [eax] - 1```
【问题讨论】:
-
我在您的 VB 示例代码中看到了神奇的数字。你指的是什么来源?示例出自哪里?
-
VBA 中的错误处理依赖于操作系统对异常的支持 (SEH)。它使用了一个奇怪的异常代码,0xC0000090(又名“浮点无效操作”)。很难猜出他们为什么喜欢那个,但它确实具有易于触发的优点。
-
@HansPassant 你怎么知道这些事情的:)
-
非正规浮点操作数的数学运算,stackoverflow.com/a/14002547/17034
-
你贴的源码不是普通的VB6。它是从已编译的 EXE 中反编译的。它是汇编语言(例如
shl eacx, 04h)和VB6(例如CDbl)的混合体。它不会编译为 VB6,也不会编译为汇编程序。反编译器可能对源代码做了一些奇怪的事情。你说你在网上找到了代码,它到底在哪里?
标签: vb6