甘肃自助建站系统哪家好,网站建设好了还要收取维护费,宁波公司注册代理,晋城市住房城乡建设局网站转自: http://www.cnblogs.com/bbdxf/p/3780187.html VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str 将一个字符串转为8 位#xff08;1个字节#xff09;的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,768 到 32,767 之间)。 b)__vbaI4St… 转自: http://www.cnblogs.com/bbdxf/p/3780187.html VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str 将一个字符串转为8 位1个字节的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,768 到 32,767 之间)。 b)__vbaI4Str 将一个字符串转为长整型(4个字节)的数值形式(范围从-2,147,483,6482,147,483,647) c)__vbar4Str 将一个字符串转为单精度单精度浮点型(4个字节)的数值形式 d)__vbar8Str 将一个字符串转为双精度单精度浮点型(8个字节)的数值形式 e) VarCyFromStr (仅VB6库. 要调试则在WINICE.DAT里必须有 OLEAUT32.DLL)字符串到变比型数据类型 f) VarBstrFromI2 (仅VB6库. 要调试则在WINICE.DAT里必须有 OLEAUT32.DLL)整型数据到字符串: 2) 数据移动 a) __vbaStrCopy 将一个字符串拷贝到内存类似于 Windows API HMEMCPY b) __vbaVarCopy 将一个变量值串拷贝到内存 c) __vbaVarMove 变量在内存中移动或将一个变量值串拷贝到内存 3) 数学运算 a) __vbavaradd 两个变量值相加 b) __vbavarsub 第一个变量减去第二个变量 c) __vbavarmul 两个变量值相乘 d) __vbavaridiv 第一个变量除以第二个变量得到一个整数商 e) __vbavarxor 两个变量值做异或运算 4) 程序设计杂项 a) __vbavarfornext 这是VB程序里的循环结构 For... Next... (Loop) b) __vbafreestr 释放出字符串所占的内存也就是把内存某个位置的字符串给抹掉 c) __vbafreeobj 释放出VB一个对象(一个窗口一个对话框)所占的内存也就是把内存某个位置的一个窗口一个对话框抹掉 d) __vbastrvarval 从字符串特点位置上获取其值 e) multibytetowidechar 将数据转换为宽字符格式VB在处理数据之都要这样做在TRW2000显示为7.8.7.8.7.8.7.8 f) rtcMsgBox 调用一个消息框类似于WINDOWS里的messagebox/a/exa,此之前一定有个PUSH命令将要在消息框中显示的数据压入椎栈 g) __vbavarcat 将两个变量值相连如果是两个字符串就连在一起 h) __vbafreevar 释放出变量所占的内存也就是把内存某个位置的变量给抹掉 i) __vbaobjset j) __vbaLenBstr 获得一个字符串的长度注VB中一个汉字的长度也为1 k) rtcInputBox 显示一个VB标准的输入窗口类似windows API getwindowtext/a, GetDlgItemtext/a l) __vbaNew 调用显示一个对话框类似 Windows API Dialogbox m) __vbaNew2 调用显示一个对话框类似 Windows API Dialogboxparam/a n) rtcTrimBstr 将字串左右两边的空格去掉 5) 比较函数 a) __vbastrcomp 比较两个字符串类似于 Windows API lstrcmp b) __vbastrcmp 比较两个字符串类似于 Windows API lstrcmp c) __vbavartsteq 比较两个变量值是否相等 d)__vbaFpCmpCy - Compares Floating point to currency. sp; Compares Floating point to currency 6) 在动态跟踪分析算法时尤其要注意的函数 rtcMidCharVar 从字符串中取相应字符VB中的MID函数用法MID(字符串,开始的位置,取几个字符) rtcLeftCharVar 从字符串左边取相应字符VB中的用法left(字符串,从左边开始取几个字符) rtcRightCharVar 从字符串右边取相应字符VB中的用法Right(字符串,从右边开始取几个字符) __vbaStrCat 用字符串的操作就是将两个字符串合起来在VB中只有一个或 __vbaStrCmp 字符串比较在VB中只有一个或 ASC()函数 取一个字符的ASC值在反汇编时还是有的movsx 操作数 7) 在函数中的缩写 bool 布尔型数据(TRUE 或 FALSE) str 字符串型数据 STRING i2 字节型数据或双字节整型数据 BYTE or Integer ui2 无符号双字节整型数据 i4 长整型数据(4字节) Long r4 单精度浮点型数据(4字节) Single r8 双精度浮点型数据(8字节) Double cy 8 个字节整型的数值形式 Currency var 变量 Variant fp 浮点数据类型 Float Point cmp 比较 compare comp 比较 compare Btw __vbavartsteq系列的还有__vbavartstne 不等于 __vbavartstGe,__vbavartstGt,__vbavartstLe,__vbavartstLt等比较大于或小于 -------------- Variant 变量的内部表示: _______________________________________________________________ 符号常量 值 内部表示 字节数 V_EMPTY 0 Empty V_NULL 1 Null V_INTEGER 2 Interger 2 V_LONG 3 Long 4 V_SINGLE 4 Single 4 V_DOUBLE 5 Double 8 V_CURRENCY 6 Currency 8 V_DATE 7 Date 8 V_STRING 8 String V_OLE 9 OLE Automation Object V_ERROR 10 Error V_BOOLEAN 11 Boolean 2 V_VARIANT 12 Variant(仅用于变体数组) 16(22) V_OBJECT 13 Object(非OLE自动化对象) 4 V_BYTE 17 Byte 1 V_ARRAY 8192 Array ________________________________________________________________ __vbaVarMove ;变体变量赋值(一般用于数值变量) lea edx,var1 ;变量1的地址放到edx lea ecx,var2 ;变量2的地址放到ecx call __vbaVarMove ;把变量1赋值给变量2 ;------------------------------------------------- __vbaVarCopy ;变体变量赋值(一般用于字符串变量) lea edx,var1 ;变量1的地址放到edx lea ecx,var2 ;变量2的地址放到ecx call __vbaVarMove ;把变量1赋值给变量2 ;------------------------------------------------- __vbaVarAdd ;变体变量相加 lea eax,var1 push eax ;加数1 lea ecx,var2 push ecx ;加数2 lea edx,var3 push edx ;结果 call __vbaVarAdd ;变量相加在eax中返回 ;------------------------------------------------- __vbaVarSub ;变体变量相减 - lea eax,var1 push eax ;被减数 lea ecx,var2 push ecx ;减数 lea edx,var3 push edx ;结果 call __vbaVarSub ;变量相减在eax中返回 ;------------------------------------------------- __vbaVarMul ;变体变量相乘 * lea eax,var1 push eax ;被乘数 lea ecx,var2 push ecx ;乘数 lea edx,var3 push edx ;结果 call __vbaVarMul ;变量相乘在eax中返回 ;------------------------------------------------- __vbaVarDiv ;变体变量相除浮点除法/ lea eax,var1 push eax ;被除数 lea ecx,var2 push ecx ;除数 lea edx,var3 push edx ;结果 call __vbaVarDiv ;变量相除在eax中返回 ;------------------------------------------------ __vbaVarIdiv ;变体变量相除整数除法\ lea eax,var1 push eax ;被除数 lea ecx,var2 push ecx ;除数 lea edx,var3 push edx ;结果 call __vbaVarIdiv ;变量相除在eax中返回 ;------------------------------------------------ __vbaVarMod ;变体变量取模运算 Mod lea eax,var1 push eax ;被除数 lea ecx,var2 push ecx ;除数 lea edx,var3 push edx ;结果 call __vbaVarMod ;变量去模在eax中返回 ;------------------------------------------------ __vbaVarNeg ;变体变量前加负号 - lea eax,var1 push eax ;变量 lea ecx,var2 push ecx ;结果 call __vbaVarNeg ;对变量取补 ;------------------------------------------------ __vbaVarPow ;变体变量求幂 ^ lea eax,var1 push eax ;底数 lea ecx,var2 push ecx ;指数 lea edx,var3 push edx ;结果 call __vbaVarPow ;求幂在eax中返回 ;------------------------------------------------ __vbaVarTstGt ;关系运算 lea eax,var1 push eax ;变量1 lea eax,var2 push eax ;变量2 call __vbaVarTstGt ;if var1 var2 then ax Hffff ;else ax 0 ;end if ;------------------------------------------------ __vbaVarTstGe ;关系运算 lea eax,var1 push eax ;变量1 lea eax,var2 push eax ;变量2 call __vbaVarTstGe ;if var1 var2 then ax Hffff ;else ax 0 ;end if ;------------------------------------------------ __vbaVarTstEq ;关系运算 lea eax,var1 push eax ;变量1 lea eax,var2 push eax ;变量2 call __vbaVarTstEq ;if var1 var2 then ax Hffff ;else ax 0 ;end if ;------------------------------------------------ __vbaVarTstNe ;关系运算 lea eax,var1 push eax ;变量1 lea eax,var2 push eax ;变量2 call __vbaVarTstNe ;if var1 var2 then ax Hffff ;else ax 0 ;end if ;------------------------------------------------ __vbaVarTstLt ;关系运算 lea eax,var1 push eax ;变量1 lea eax,var2 push eax ;变量2 call __vbaVarTstLt ;if var1 var2 then ax Hffff ;else ax 0 ;end if ;------------------------------------------------ __vbaVarTstLe ;关系运算 lea eax,var1 push eax ;变量1 lea eax,var2 push eax ;变量2 call __vbaVarTstLe ;if var1 var2 then ax Hffff ;else ax 0 ;end if ;------------------------------------------------ __vbaVarAnd ;逻辑运算 And lea eax,var1 push eax ;变量1 lea ecx,var2 push ecx ;变量2 lea edx,var3 push edx ;结果 call __vbaVarAnd ;逻辑运算,在eax中返回 ;------------------------------------------------ __vbaVarOr ;逻辑运算 Or lea eax,var1 push eax ;变量1 lea ecx,var2 push ecx ;变量2 lea edx,var3 push edx ;结果 call __vbaVarOr ;逻辑运算,在eax中返回 ;------------------------------------------------ __vbaVarXor ;逻辑运算 Xor lea eax,var1 push eax ;变量1 lea ecx,var2 push ecx ;变量2 lea edx,var3 push edx ;结果 call __vbaVarXor ;逻辑运算,在eax中返回 ;------------------------------------------------ __vbaVarEqv ;逻辑运算 Eqv lea eax,var1 push eax ;变量1 lea ecx,var2 push ecx ;变量2 lea edx,var3 push edx ;结果 call __vbaVarEqv ;逻辑运算,在eax中返回 ;------------------------------------------------ __vbaVarImp ;逻辑运算 Imp lea eax,var1 push eax ;变量1 lea ecx,var2 push ecx ;变量2 lea edx,var3 push edx ;结果 call __vbaVarImp ;逻辑运算,在eax中返回 ;------------------------------------------------ __vbaVarNot ;逻辑运算 Not lea eax,var1 push eax ;变量1 lea ecx,var2 push ecx ;结果 call __vbaVarNot ;逻辑运算,在eax中返回 ;------------------------------------------------ ;------------------------------------------------下面是函数 lea eax,var1 ;函数 Abs(num) push eax ;参数1 数值型 lea ecx,var2 push ecx ;结果 call __vbaVarAbs ;在eax中返回 结果 ;------------------------------------------------ rtcAnsiValueBstr ;函数 Asc(string) lea eax,var1 push eax ;参数1 字符串型 call rtcAnsiValueBstr ;结果在eax中返回 interger ;------------------------------------------------ MSVBVM60.#585 ;函数 Atn(num) push ecx ;参数 浮点数,用8个字节 push ecx CALL MSVBVM60.#585 ;结果在浮点栈中返回 ;------------------------------------------------ rtcVarBstrFromAnsi ;函数 Chr(interger) push eax ;参数1 整型 call rtcVarBstrFromAnsi ;结果在eax中返回 string ;------------------------------------------------ rtcCommandVar ;函数 Command() #670 push eax ;参数1 字符串 call rtcCommandVar ;结果在eax中返回 string ;------------------------------------------------ rtcCos ;函数 Cos(num) #583 call rtcCos ;输入参数在当前栈顶,8个字节,注意是浮点型 fstp st ;结果在浮点栈顶 ;------------------------------------------------ rtcCurrentDir ;函数 curdir(string) #647 lea eax,var1 ;参数1 字符串 push eax lea edx,var2 ;结果 push edx call rtcCurrentDir ;结果在eax中返回 ;------------------------------------------------- rtcGetDateVar ;函数 Date #610 lea edx,var1 ;结果 push edx call rtcGetDateVar ;结果在eax中返回,日期型(Date) ;------------------------------------------------- rtcDateAdd ;函数 DateAdd(string,double,date) #661 push date ;8字节日期date push double ;8字节浮点数double push string ;1字节字符的ASCII码,这里是地址 push var1 ;结果,日期型(date) call rtcDateAdd ;结果在eax中返回,日期型(Date) ;-------------------------------------------------- rtcDateDiff ;函数 DateDiff(string,date1,date2,...,...) #662 push 1 ;默认值 push 1 ;默认值 lea eax,var1 ;日期2 push eax lea ecx,var2 ;日期1 push ecx lea edx,var3 ;字符串 push edx lea eax,var4 ;结果 push eax call rtcDateDiff ;结果在eax中返回,长整型(long) ;--------------------------------------------------- rtcDatePart ;函数 DatePart(string,date,...,...) #663 push 1 ;默认值 push 1 ;默认值 lea eax,var1 ;日期 push eax lea ecx,var2 ;字符串 push ecx lea edx,var3 ;结果 push edx call rtcDatePart ;结果在eax中返回 ;---------------------------------------------------- rtcPackDate ;函数 DateSerial(integer,integer,integer) #538 lea eax,var1 ;日 push eax lea ecx,var2 ;月 push ecx lea edx,var3 ;年 push edx lea eax,var4 ;结果 push eax call rtcPackDate ;结果在eax中返回,日期型(Date) ;----------------------------------------------------- rtcGetDateValue ;函数 DateValue(string) lea eax,var1 ;字符串 push eax lea edx,var2 ;结果 push edx call rtcGetDateValue ;结果在eax中返回,日期型(Date) ;----------------------------------------------------- rtcGetDayOfMonth ;函数 Day(date) #542 lea eax,var1 ;日期 push eax lea ecx,var2 ;结果 push ecx call rtcGetDayOfMonth ;结果在eax中返回,整型 ;----------------------------------------------------- rtcDir ;函数 Dir #645 lea eax, var1 ;属性 push eax lea ecx,var2 ;路径 push ecx call rtcDir ;结果在eax中返回,字符串型(string) ;----------------------------------------------------- rtcExp ;函数 exp #586 LEA EDX,DWORD PTR SS:[EBP-24] ;参数 PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaR8Var] ;转换成浮点数,结果在浮点寄存器里 SUB ESP,8 FSTP QWORD PTR SS:[ESP] ;压入堆栈 CALL DWORD PTR DS:[MSVBVM60.#586] ;rtcExp FSTP QWORD PTR SS:[EBP-2C] ;结果存入堆栈 ;----------------------------------------------------- rtcFileDateTime ;函数 FileDateTime #577 LEA EDX,DWORD PTR SS:[EBP-34] PUSH 工程1.004016B0 ;文件名 PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#577] ;rtcFileDateTime ;调用后结果同时在eax中 ;------------------------------------------------------ rtcFileLen ;函数 FileLen #578 PUSH 工程1.004016B0 ;文件名 CALL DWORD PTR DS:[MSVBVM60.#578] ;rtcFileLen ;结果在eax中 ;------------------------------------------------------ __vbaVarFix ;函数Fix(参数1) LEA EDX,DWORD PTR SS:[EBP-24] LEA EAX,DWORD PTR SS:[EBP-54] PUSH EDX ;参数1 PUSH EAX ;返回的结果 CALL DWORD PTR DS:[MSVBVM60.__vbaVarFix] MOV EDX,EAX ;------------------------------------------------------ rtcHexVarFromVar ;函数 Hex(num) lea eax,var1 push eax ;参数1 数值型 lea ecx,var2 push ecx ;存放结果的参数 call rtcHexVarFromVar ;在eax中返回string ;------------------------------------------------------ rtcGetHourOfDay ;函数 Hour #543 LEA EAX,DWORD PTR SS:[EBP-34] ;时间日期型参数 LEA ECX,DWORD PTR SS:[EBP-44] ;存放结果的参数 PUSH EAX PUSH ECX CALL DWORD PTR DS:[MSVBVM60.#543] ;Hour ;结果同时在eax中返回 ;------------------------------------------------------ rtcImmediateIf iif(参数1,参数2,参数3) LEA EDX,DWORD PTR SS:[EBP-54] ;参数3 LEA EAX,DWORD PTR SS:[EBP-44] ;参数2 PUSH EDX LEA ECX,DWORD PTR SS:[EBP-34] ;参数1,即表达式 PUSH EAX LEA EDX,DWORD PTR SS:[EBP-64] ;存放结果的参数 PUSH ECX PUSH EDX MOV DWORD PTR SS:[EBP-2C],-1 MOV DWORD PTR SS:[EBP-34],0B CALL DWORD PTR DS:[MSVBVM60.#681] ;iif ;结果同时在eax中返回 ;------------------------------------------------------ __vbaInStrVar ;函数 InStr(起始位置,源字符串,目标字符串,比较方式) LEA EDX,DWORD PTR SS:[EBP-24] PUSH 1 ;起始位置,从1开始 LEA EAX,DWORD PTR SS:[EBP-34] PUSH EDX ;被搜索的字符串 PUSH EAX ;要搜的字符串 LEA ECX,DWORD PTR SS:[EBP-54] PUSH 1 ;比较方式 PUSH ECX ;返回的结果 CALL DWORD PTR DS:[MSVBVM60.__vbaInStrVar] MOV EDX,EAX ;结果同时在eax中返回 ;------------------------------------------------------ rtcInStrRev ;函数 InStrRev(源字符串,目标字符串,起始位置,比较方式) #709 XOR ESI,ESI PUSH ESI ;比较方式 PUSH -1 ;起始位置 LEA EAX,DWORD PTR SS:[EBP-4C] LEA ECX,DWORD PTR SS:[EBP-24] PUSH EAX ;目标字符串 LEA EDX,DWORD PTR SS:[EBP-48] PUSH ECX ;源字符串 PUSH EDX ;返回的结果 CALL DWORD PTR DS:[MSVBVM60.#709] ;rtcInStrRev ;结果同时在eax中返回 ;结果同时在eax中返回 ;------------------------------------------------------ __vbaVarInt ;函数 Int(参数1) LEA ECX,DWORD PTR SS:[EBP-24] LEA EDX,DWORD PTR SS:[EBP-54] PUSH ECX ;参数1 PUSH EDX ;返回的结果 CALL DWORD PTR DS:[MSVBVM60.__vbaVarInt] MOV EDX,EAX ;结果同时在eax中返回 ;------------------------------------------------------ rtcIsArray ;函数 IsArray #556 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#556] ; MSVBVM60.rtcIsArray ;结果在eax中返回 ;------------------------------------------------------ rtcIsDate ;函数 IsDate #557 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#557]; MSVBVM60.rtcIsDate ;结果在eax中返回 ;------------------------------------------------------ rtcIsEmpty ;函数 IsEmpty #558 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#558] ; MSVBVM60.rtcIsEmpty ;结果在eax中返回 ;------------------------------------------------------ rtcIsError ;函数 IsError #559 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#559] ; MSVBVM60.rtcIsError ;结果在eax中返回 ;------------------------------------------------------ rtcIsMissing ;函数 IsMissing #592 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#592] ; MSVBVM60.rtcIsMissing ;结果在eax中返回 ;------------------------------------------------------ rtcIsNull ;函数 IsNull #560 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这是指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#560] ;MSVBVM60.rtcIsNull ;结果在eax中返回 ;------------------------------------------------------ rtcIsNumeric ;函数 IsNumeric #561 LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1 **这里指针 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#561];MSVBVM60.rtcIsNumeric ;结果在eax中返回 ;------------------------------------------------------ rtcIsObject ;函数 IsObject #562 LEA EAX,DWORD PTR SS:[EBP-2C] PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#562] ;MSVBVM60.rtcIsObject ;结果在eax中返回 ;------------------------------------------------------ __vbaLbound ;函数 Lbound LEA EAX,DWORD PTR SS:[EBP-2C] ;参数1,数组 PUSH EAX PUSH 1 ;参数2,数组维数 CALL DWORD PTR DS:[MSVBVM60.__vbaLboun; MSVBVM60.__vbaLbound ;结果在eax中返回 ;------------------------------------------------------ rtcLowerCaseVar ;函数 Lcase #518 LEA EDX,DWORD PTR SS:[EBP-24] ;参数1 LEA EAX,DWORD PTR SS:[EBP-48] ;结果 PUSH EDX PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#518] ;MSVBVM60.rtcLowerCaseVar ;结果在eax中返回 ;------------------------------------------------------ rtcLeftCharVar ;函数 Left #617 LEA EDX,DWORD PTR SS:[EBP-24] ;参数1 PUSH 3 ;参数2 LEA EAX,DWORD PTR SS:[EBP-48] ;结果 PUSH EDX PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#617];MSVBVM60.rtcLeftCharVar ;结果在eax中返回 ;------------------------------------------------------ __vbaLenBstr ;函数 Len MOV EDX,DWORD PTR SS:[EBP-18] ;参数1 PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaLenBs; MSVBVM60.__vbaLenBstr ;结果在eax中返回 ;------------------------------------------------------ __vbaLenBstrB ;函数 LenB MOV EAX,DWORD PTR SS:[EBP-18] ;参数1 PUSH EAX CALL DWORD PTR DS:[MSVBVM60.__vbaLenBs; MSVBVM60.__vbaLenBstrB ;结果在eax中返回 ;------------------------------------------------------ rtcLog ;函数 Log #587 LEA EDX,DWORD PTR SS:[EBP-38] ;要作为参数的变量 PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaR8Var ;转换成实数,结果在浮点栈中 SUB ESP,8 FSTP QWORD PTR SS:[ESP] ;参数入栈 CALL DWORD PTR DS:[MSVBVM60.#587] ; MSVBVM60.rtcLog ;结果在浮点栈中 ;------------------------------------------------------ rtcLeftTrimVar ;函数 Ltrim #522 LEA ECX,DWORD PTR SS:[EBP-68] ;参数1 LEA EDX,DWORD PTR SS:[EBP-58] ;结果 PUSH ECX PUSH EDX CALL DWORD PTR DS:[MSVBVM60.#522] ; MSVBVM60.rtcLeftTrimVar ;结果在eax中返回 ;------------------------------------------------------ rtcMidCharVar ;函数 Mid PUSH EAX ;参数3 LEA ECX,DWORD PTR SS:[EBP-58] PUSH 3 ;参数2 LEA EDX,DWORD PTR SS:[EBP-48] PUSH ECX ;参数1 PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#632];MSVBVM60.rtcMidCharVar ;结果在eax中返回 ;------------------------------------------------------ rtcGetMinuteOfHour ;函数 Minute #544 LEA EAX,DWORD PTR SS:[EBP-24] ;参数1 LEA ECX,DWORD PTR SS:[EBP-64] ;结果 PUSH EAX PUSH ECX CALL DWORD PTR DS:[MSVBVM60.#544] ;MSVBVM60.rtcGetMinuteOfHour ;结果在eax中返回 ;------------------------------------------------------ rtcGetMonthOfYear ;函数 Month #545 LEA EDX,DWORD PTR SS:[EBP-24] ;参数1 LEA EAX,DWORD PTR SS:[EBP-64] ;结果 PUSH EDX PUSH EAX CALL DWORD PTR DS:[MSVBVM60.#545] ;MSVBVM60.rtcGetMonthOfYear ;结果在eax中返回 ;------------------------------------------------------ rtcMonthName ;函数 MonthName #707 PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#707] ;MSVBVM60.rtcMonthName ;结果在eax中返回 ;------------------------------------------------------ rtcMsgBox ;函数 MsgBox LEA EAX,DWORD PTR SS:[EBP-64] LEA ECX,DWORD PTR SS:[EBP-54] PUSH EAX ;参数5 LEA EDX,DWORD PTR SS:[EBP-34] PUSH ECX ;参数4 PUSH EDX ;参数3 LEA EAX,DWORD PTR SS:[EBP-24] PUSH ESI ;参数2 PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#595]; MSVBVM60.rtcMsgBox ;结果在eax中返回 ;------------------------------------------------------ rtcGetPresentDate ;函数 Now #546 LEA EDX,DWORD PTR SS:[EBP-34] ;存放结果的参数 PUSH EDX ; CALL DWORD PTR DS:[MSVBVM60.#546] ;Now ;结果同时在eax中返回 ;------------------------------------------------------ rtcOctVarFromVar ;函数 Oct(num) lea eax,var1 push eax ;参数1 数值型 lea ecx,var2 push ecx ;结果 call rtcOctVarFromVar ;在eax中返回string ;------------------------------------------------------ rtcReplace ;函数 Replace #712 PUSH ESI ;参数6 PUSH -1 ;参数5 PUSH 1 ;参数4 LEA EAX,DWORD PTR SS:[EBP-60] PUSH EAX ;参数3 LEA EDX,DWORD PTR SS:[EBP-5C] PUSH EDX ;参数2 LEA EAX,DWORD PTR SS:[EBP-24] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#712]; MSVBVM60.rtcReplace ;结果在eax中返回 ;----------------------------------------------------- rtcRgb ;函数 #588 PUSH 28 ;参数3 PUSH 1E ;参数2 PUSH 14 ;参数1 CALL DWORD PTR DS:[MSVBVM60.#588]; MSVBVM60.rtcRgb ;结果在eax中返回 ;----------------------------------------------------- rtcRightCharVar ;函数Right #619 LEA EDX,DWORD PTR SS:[EBP-24] PUSH 3 ;参数2 LEA EAX,DWORD PTR SS:[EBP-44] PUSH EDX ;参数1 PUSH EAX ;结果 CALL DWORD PTR DS:[MSVBVM60.#619];MSVBVM60.rtcRightCharVar ;结果在eax中返回 ;----------------------------------------------------- rtcRound ;函数 Round #714 LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDI ;参数2 LEA EAX,DWORD PTR SS:[EBP-44] PUSH EDX ;参数1 PUSH EAX ;结果 CALL DWORD PTR DS:[MSVBVM60.#714] ;MSVBVM60.rtcRound ;结果在eax中返回 ;----------------------------------------------------- rtcRandomize ;函数 Randomize #594 LEA EDX,DWORD PTR SS:[EBP-34] PUSH EDX CALL DWORD PTR DS:[MSVBVM60.#594] ; MSVBVM60.rtcRandomize ;----------------------------------------------------- rtcRandomNext ;函数 Rnd #593 LEA EAX,DWORD PTR SS:[EBP-34] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#593] ; MSVBVM60.rtcRandomNext ;结果在浮点栈中 ;----------------------------------------------------- rtcRightTrimVar ;函数 Rtrim #524 LEA ECX,DWORD PTR SS:[EBP-68] ;参数1 LEA EDX,DWORD PTR SS:[EBP-58] ;结果 PUSH ECX PUSH EDX CALL DWORD PTR DS:[MSVBVM60.#524] ; MSVBVM60.rtcRightTrimVar ;结果在eax中返回 ;----------------------------------------------------- rtcGetSecondOfMinute ;函数 Sound #547 LEA EAX,DWORD PTR SS:[EBP-24] ;参数1 LEA ECX,DWORD PTR SS:[EBP-44] ;结果 PUSH EAX PUSH ECX CALL DWORD PTR DS:[MSVBVM60.#547];MSVBVM60.rtcGetSecondOfMinute ;结果在eax中返回 ;----------------------------------------------------- __vbaR8Sgn ;函数 Sgn PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaR8Var;MSVBVM60.__vbaR8Var SUB ESP,8 FSTP QWORD PTR SS:[ESP] ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaR8Sgn;MSVBVM60.__vbaR8Sgn ;结果在ax中返回 ;----------------------------------------------------- rtcShell ;函数 Shell #600 PUSH 1 ;参数2 PUSH EDX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#600];MSVBVM60.rtcShell ;结果在浮点栈中 ;----------------------------------------------------- rtcSin ;函数 Sin #582 LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaR8Var;MSVBVM60.__vbaR8Var SUB ESP,8 FSTP QWORD PTR SS:[ESP] ;参数1 CALL DWORD PTR DS:[MSVBVM60.#582] ;MSVBVM60.rtcSin ;结果在浮点栈中 ;----------------------------------------------------- rtcSpaceVar ;函数 Space #526 PUSH 5 ;参数1 LEA EDX,DWORD PTR SS:[EBP-34] PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#526]; MSVBVM60.rtcSpaceVar ;结果在eax中返回 ;----------------------------------------------------- rtcSplit ;函数 Split #711 PUSH ESI ;参数4 LEA EDX,DWORD PTR SS:[EBP-48] PUSH -1 ;参数3 LEA EAX,DWORD PTR SS:[EBP-24] PUSH EDX ;参数2 LEA ECX,DWORD PTR SS:[EBP-38] LEA EDX,DWORD PTR SS:[EBP-58] PUSH EAX ;参数1 PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#711] ;MSVBVM60.rtcSplit ;结果在eax中返回 ;----------------------------------------------------- rtcSqr ;函数 rtcSqr #614 LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaR8Var;MSVBVM60.__vbaR8Var SUB ESP,8 FSTP QWORD PTR SS:[ESP] ;参数1 CALL DWORD PTR DS:[MSVBVM60.#614] ;MSVBVM60.rtcSqr ;结果在浮点栈中 ;----------------------------------------------------- rtcVarStrFromVar ;函数 Str #613 LEA EDX,DWORD PTR SS:[EBP-24] LEA EAX,DWORD PTR SS:[EBP-44] PUSH EDX ;参数1 PUSH EAX ;结果 CALL DWORD PTR DS:[MSVBVM60.#613] ;MSVBVM60.rtcVarStrFromVar ;结果在eax中返回 ;----------------------------------------------------- __vbaStrCompVar ;函数 StrComp LEA EDX,DWORD PTR SS:[EBP-24] LEA EAX,DWORD PTR SS:[EBP-34] PUSH EDX ;参数1 PUSH EAX ;参数2 LEA ECX,DWORD PTR SS:[EBP-54] PUSH EDI ;参数3 PUSH ECX ;结果 CALL DWORD PTR DS:[MSVBVM60.__vbaStrCo;MSVBVM60.__vbaStrCompVar ;结果在eax中返回 ;----------------------------------------------------- rtcStrConvVar2 ;函数 Strconv #717 PUSH EDI ;参数3 LEA EDX,DWORD PTR SS:[EBP-24] PUSH 1 ;参数2 LEA EAX,DWORD PTR SS:[EBP-44] PUSH EDX ;参数1 PUSH EAX ;结果 CALL DWORD PTR DS:[MSVBVM60.#717]; MSVBVM60.rtcStrConvVar2 ;结果在eax中返回 ;----------------------------------------------------- rtcStringVar ;函数 String LEA EDX,DWORD PTR SS:[EBP-24] LEA EAX,DWORD PTR SS:[EBP-44] PUSH EDX ;参数2 PUSH 5 ;参数1 PUSH EAX ;结果 CALL DWORD PTR DS:[MSVBVM60.#607];MSVBVM60.rtcStringVar ;结果在eax中返回 ;----------------------------------------------------- rtcStrReverse ;函数 StrReverse #713 LEA EAX,DWORD PTR SS:[EBP-38] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#713] ;MSVBVM60.rtcStrReverse ;结果在eax中返回 ;----------------------------------------------------- rtcTan ;函数 Tan #584 LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDX CALL DWORD PTR DS:[MSVBVM60.__vbaR8Var;MSVBVM60.__vbaR8Var SUB ESP,8 FSTP QWORD PTR SS:[ESP] ;参数1 CALL DWORD PTR DS:[MSVBVM60.#584] ;MSVBVM60.rtcTan ;结果在浮点栈中返回 ;----------------------------------------------------- rtcGetTimeVar ;函数 Time #612 LEA EDX,DWORD PTR SS:[EBP-34] PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#612];MSVBVM60.rtcGetTimeVar ;结果在eax中返回 ------------------------------------------------------- rtcGetTimer ;函数 Timer #535 CALL DWORD PTR DS:[MSVBVM60.#535] ; MSVBVM60.rtcGetTimer ;结果在浮点栈中返回 ;----------------------------------------------------- rtcPackTime ;函数 TimeSerial #539 LEA EDX,DWORD PTR SS:[EBP-44] PUSH EDX ;参数3 LEA EAX,DWORD PTR SS:[EBP-34] PUSH EAX ;参数2 LEA ECX,DWORD PTR SS:[EBP-24] PUSH ECX ;参数1 LEA EDX,DWORD PTR SS:[EBP-64] PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#539] ;MSVBVM60.rtcPackTime ;结果在eax中返回 ------------------------------------------------------- rtcGetTimeValue ;函数 TimeValue #541 LEA EAX,DWORD PTR SS:[EBP-38] LEA ECX,DWORD PTR SS:[EBP-48] PUSH EAX ;参数1 PUSH ECX ;结果 CALL DWORD PTR DS:[MSVBVM60.#541] ;MSVBVM60.rtcGetTimeValue ;结果在eax中返回 ------------------------------------------------------- rtcTrimVar ;函数 Trim #520 LEA ECX,DWORD PTR SS:[EBP-68] ;参数1 LEA EDX,DWORD PTR SS:[EBP-58] ;结果 PUSH ECX PUSH EDX CALL DWORD PTR DS:[MSVBVM60.#520] ; MSVBVM60.rtcTrimVar ;结果在eax中返回 ------------------------------------------------------- rtcTypeName ;函数 TypeName #591 LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#591];MSVBVM60.rtcTypeName ;结果在eax中返回 ------------------------------------------------------- __vbaUbound ;函数 Ubound LEA ECX,DWORD PTR SS:[EBP-2C] ;参数1,数组 PUSH ECX PUSH 1 ;参数2,数组维数 CALL DWORD PTR DS:[MSVBVM60.__vbaUboun;MSVBVM60.__vbaUbound ;结果在eax中返回 ;------------------------------------------------------ rtcUpperCaseVar ;函数 Ucase LEA ECX,DWORD PTR SS:[EBP-24] ;参数1 LEA EDX,DWORD PTR SS:[EBP-48] ;结果 PUSH ECX PUSH EDX CALL DWORD PTR DS:[MSVBVM60.#528] ;MSVBVM60.rtcUpperCaseVar ;结果在eax中返回 ;------------------------------------------------------ rtcR8ValFromBstr ;函数 Val #581 LEA EAX,DWORD PTR SS:[EBP-38] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#581];MSVBVM60.rtcR8ValFromBstr ;结果在浮点栈中 ;----------------------------------------------------- rtcVarType ;函数 VarType #563 LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDX ;参数1 CALL DWORD PTR DS:[MSVBVM60.#563];MSVBVM60.rtcVarType ;结果在eax中 ;----------------------------------------------------- rtcWeekdayName ;函数 WeekdayName #706 PUSH EDI LEA EDX,DWORD PTR SS:[EBP-24] PUSH EDI PUSH EDX CALL DWORD PTR DS:[MSVBVM60.#706];MSVBVM60.rtcWeekdayName ;结果在eax中 ;----------------------------------------------------- rtcGetYear ;函数 Year #553 LEA EAX,DWORD PTR SS:[EBP-24] LEA ECX,DWORD PTR SS:[EBP-44] PUSH EAX ;参数1 PUSH ECX ;结果 CALL DWORD PTR DS:[MSVBVM60.#553];MSVBVM60.rtcGetYear ;结果在eax中 ;----------------------------------------------------- __vbaBoolErrVar ;函数 CBool LEA EDX,DWORD PTR SS:[EBP-74] PUSH EDX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaBoolE; MSVBVM60.__vbaBoolErrVar ;结果在ax中 ;----------------------------------------------------- __vbaUI1ErrVar ;函数 Cbyte LEA EAX,DWORD PTR SS:[EBP-74] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaUI1Er; MSVBVM60.__vbaUI1ErrVar ;结果在al中 ;----------------------------------------------------- __vbaCyErrVar ;函数 Ccur LEA ECX,DWORD PTR SS:[EBP-74] PUSH ECX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaCyErr; MSVBVM60.__vbaCyErrVar ;结果在eax中 ;----------------------------------------------------- __vbaDateVar ;函数 Cdate LEA EDX,DWORD PTR SS:[EBP-74] PUSH EDX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaDateV; MSVBVM60.__vbaDateVar SUB ESP,8 FSTP QWORD PTR SS:[ESP] CALL DWORD PTR DS:[MSVBVM60.__vbaDateR; MSVBVM60.__vbaDateR8 ;结果在浮点栈中 ;----------------------------------------------------- __vbaR8ErrVar ;函数 Cdbl LEA EAX,DWORD PTR SS:[EBP-74] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaR8Err; MSVBVM60.__vbaR8ErrVar ;结果在浮点栈中 ;----------------------------------------------------- rtDecFromVar ;函数 Cdec #564 LEA ECX,DWORD PTR SS:[EBP-F4] LEA EDX,DWORD PTR SS:[EBP-74] PUSH ECX ;参数1 PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#564] ; MSVBVM60.rtDecFromVar ;结果在eax中 ;----------------------------------------------------- __vbaI2ErrVar ;函数 Cint LEA EAX,DWORD PTR SS:[EBP-74] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaI2Err; MSVBVM60.__vbaI2ErrVar ;结果在ax中 ;----------------------------------------------------- __vbaI4ErrVar ;函数 Clng LEA ECX,DWORD PTR SS:[EBP-74] PUSH ECX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaI4Err; MSVBVM60.__vbaI4ErrVar ;结果在eax中 ;----------------------------------------------------- __vbaR4ErrVar ;函数 Csng LEA EDX,DWORD PTR SS:[EBP-74] PUSH EDX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaR4Err; MSVBVM60.__vbaR4ErrVar ;结果在浮点栈中 ;----------------------------------------------------- __vbaStrErrVarCopy ;函数 Cstr LEA EAX,DWORD PTR SS:[EBP-74] PUSH EAX ;参数1 CALL DWORD PTR DS:[MSVBVM60.__vbaStrEr; MSVBVM60.__vbaStrErrVarCopy ;结果在eax中 ;----------------------------------------------------- __vbaVarCopy ;函数 Cvar LEA EDX,DWORD PTR SS:[EBP-74] ;参数1 LEA ECX,DWORD PTR SS:[EBP-54] ;结果 CALL DWORD PTR DS:[MSVBVM60.__vbaVarCo; MSVBVM60.__vbaVarCopy ;结果在eax中 ;----------------------------------------------------- __vbaFileOpen ;Open语句 PUSH 工程1.004014C0 ;文件名 PUSH 1 ;文件号 PUSH 1 ;len PUSH 320 ;for,access,lock CALL DWORD PTR DS:[MSVBVM60.__vbaFileO; MSVBVM60.__vbaFileOpen ;------------------------------------------------------ __vbaFileClose ;Close语句 PUSH 1 ;文件号 CALL DWORD PTR DS:[MSVBVM60.__vbaFileC; MSVBVM60.__vbaFileClose ;------------------------------------------------------ rtcFreeFile ;函数 FreeFile LEA EAX,DWORD PTR SS:[EBP-34] PUSH EAX ;结果 CALL DWORD PTR DS:[MSVBVM60.#648]; MSVBVM60.rtcFreeFile ;结果在ax中 ;------------------------------------------------------ rtcFileLength ;函数 LOF #570 LEA EDX,DWORD PTR SS:[EBP-34] PUSH EDX ;文件号 CALL DWORD PTR DS:[MSVBVM60.#570]; MSVBVM60.rtcFileLength ;结果在eax中 ;------------------------------------------------------ rtcFileLocation ;函数 loc #569 LEA EAX,DWORD PTR SS:[EBP-34] PUSH EAX ;文件号 CALL DWORD PTR DS:[MSVBVM60.#569]; MSVBVM60.rtcFileLocation ;结果在eax中 ;------------------------------------------------------ rtcFileAttributes ;函数 FileAttr #555 LEA ECX,DWORD PTR SS:[EBP-34] PUSH 1 ;属性 PUSH ECX ;文件号 CALL DWORD PTR DS:[MSVBVM60.#555]; MSVBVM60.rtcFileAttributes ;结果在eax中 ;------------------------------------------------------ __vbaPrintFile ;Print #文件号,变量 (顺序文件操作) LEA EAX,DWORD PTR SS:[EBP-24] LEA ECX,DWORD PTR SS:[EBP-34] PUSH ECX ;变量 PUSH EAX ;文件号 PUSH 工程1.00401948 CALL DWORD PTR DS:[MSVBVM60.__vbaPrint;MSVBVM60.__vbaPrintFile ;----------------------------------------------------- __vbaWriteFile ;write #文件号,变量 (顺序文件操作) LEA EDX,DWORD PTR SS:[EBP-24] LEA EAX,DWORD PTR SS:[EBP-34] PUSH EDX ;变量 PUSH EAX ;文件号 PUSH 工程1.00401948 CALL DWORD PTR DS:[MSVBVM60.__vbaWrite;MSVBVM60.__vbaWriteFile ;----------------------------------------------------- __vbaInputFile ;input #文件号,变量 (顺序文件操作) LEA EAX,DWORD PTR SS:[EBP-24] LEA ECX,DWORD PTR SS:[EBP-34] PUSH EAX ;变量 PUSH ECX ;文件号 PUSH 工程1.00401938 CALL DWORD PTR DS:[MSVBVM60.__vbaInput; MSVBVM60.__vbaInputFile ;----------------------------------------------------- __vbaLineInputVar ;line input #文件号,变量 (顺序文件操作) LEA EDX,DWORD PTR SS:[EBP-34] PUSH EDX ;文件号 LEA EAX,DWORD PTR SS:[EBP-44] PUSH EAX ;变量 CALL DWORD PTR DS:[MSVBVM60.__vbaLineI; MSVBVM60.__vbaLineInputVar ;结果在eax中返回 ;----------------------------------------------------- rtcInputCharCountVar ;函数 input(#文件号,长度) #621 (顺序文件操作) LEA ECX,DWORD PTR SS:[EBP-34] PUSH ECX ;文件号 LEA EDX,DWORD PTR SS:[EBP-64] PUSH 2 ;长度 PUSH EDX ;结果 CALL DWORD PTR DS:[MSVBVM60.#621]; MSVBVM60.rtcInputCharCountVar ;结果在eax中返回 ;----------------------------------------------------- __vbaPut4 ;语句 Put 文件号,位置,变量 (binary文件操作) LEA EAX,DWORD PTR SS:[EBP-34] PUSH EAX ;文件号 LEA ECX,DWORD PTR SS:[EBP-24] PUSH 2 ;位置 PUSH ECX ;变量 PUSH -1 CALL DWORD PTR DS:[MSVBVM60.__vbaPut4;MSVBVM60.__vbaPut4 ;----------------------------------------------------- __vbaFileSeek ;语句 Seek 文件号,位置 (binary文件操作) LEA EDX,DWORD PTR SS:[EBP-34] PUSH EDX ;文件号 PUSH 2 ;位置 CALL DWORD PTR DS:[MSVBVM60.__vbaFileS;MSVBVM60.__vbaFileSeek ;----------------------------------------------------- __vbaGet4 ;语句 Get 文件号,位置,变量 (binary文件操作) LEA EAX,DWORD PTR SS:[EBP-34] PUSH EAX ;文件号 LEA ECX,DWORD PTR SS:[EBP-44] PUSH 2 ;位置 PUSH ECX ;变量 PUSH -1 CALL DWORD PTR DS:[MSVBVM60.__vbaGet4;MSVBVM60.__vbaGet4 -------------------- variant结构, 和vartype enum vb中如果不显示的定义数据类型, 并且没有加 Option Explicit的话, 那么定义的变量为variant. variant的结构的前2个字节描述了类型, 后面有3个word的保留. 接着为值. enum VARENUM { VT_EMPTY 0, VT_NULL 1, VT_I2 2, VT_I4 3, VT_R4 4, VT_R8 5, VT_CY 6, VT_DATE 7, VT_BSTR 8, VT_DISPATCH 9, VT_ERROR 10, VT_BOOL 11, VT_VARIANT 12, VT_UNKNOWN 13, VT_DECIMAL 14, VT_I1 16, VT_UI1 17, VT_UI2 18, VT_UI4 19, VT_I8 20, VT_UI8 21, VT_INT 22, VT_UINT 23, VT_VOID 24, VT_HRESULT 25, VT_PTR 26, VT_SAFEARRAY 27, VT_CARRAY 28, VT_USERDEFINED 29, VT_LPSTR 30, VT_LPWSTR 31, VT_RECORD 36, VT_INT_PTR 37, VT_UINT_PTR 38, VT_FILETIME 64, VT_BLOB 65, VT_STREAM 66, VT_STORAGE 67, VT_STREAMED_OBJECT 68, VT_STORED_OBJECT 69, VT_BLOB_OBJECT 70, VT_CF 71, VT_CLSID 72, VT_VERSIONED_STREAM 73, VT_BSTR_BLOB 0xfff, VT_VECTOR 0x1000, VT_ARRAY 0x2000, VT_BYREF 0x4000, VT_RESERVED 0x8000, VT_ILLEGAL 0xffff, VT_ILLEGALMASKED 0xfff, VT_TYPEMASK 0xfff } ; struct tagVARIANT { union { struct __tagVARIANT { VARTYPE vt; WORD wReserved1; WORD wReserved2; WORD wReserved3; union { LONGLONG llVal; LONG lVal; BYTE bVal; SHORT iVal; FLOAT fltVal; DOUBLE dblVal; VARIANT_BOOL boolVal; _VARIANT_BOOL bool; SCODE scode; CY cyVal; DATE date; BSTR bstrVal; IUnknown *punkVal; IDispatch *pdispVal; SAFEARRAY *parray; BYTE *pbVal; SHORT *piVal; LONG *plVal; LONGLONG *pllVal; FLOAT *pfltVal; DOUBLE *pdblVal; VARIANT_BOOL *pboolVal; _VARIANT_BOOL *pbool; SCODE *pscode; CY *pcyVal; DATE *pdate; BSTR *pbstrVal; IUnknown **ppunkVal; IDispatch **ppdispVal; SAFEARRAY **pparray; VARIANT *pvarVal; PVOID byref; CHAR cVal; USHORT uiVal; ULONG ulVal; ULONGLONG ullVal; INT intVal; UINT uintVal; DECIMAL *pdecVal; CHAR *pcVal; USHORT *puiVal; ULONG *pulVal; ULONGLONG *pullVal; INT *pintVal; UINT *puintVal; struct __tagBRECORD { PVOID pvRecord; IRecordInfo *pRecInfo; } __VARIANT_NAME_4; } __VARIANT_NAME_3; } __VARIANT_NAME_2; DECIMAL decVal; } __VARIANT_NAME_1; } ;