VB程序逆向常用的函数

转自: 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标准的输入窗口,类似window's API getwindowtext/a, GetDlgItemtext/a 
l) __vbaNew      调用显示一个对话框,类似 Windows' API Dialogbox 
m) __vbaNew2    调用显示一个对话框,类似 Windows' API Dialogboxparam/a 
n) rtcTrimBstr   将字串左右两边的空格去掉


5) 比较函数


a)  __vbastrcomp   比较两个字符串,类似于 Window's API lstrcmp 
b)  __vbastrcmp   比较两个字符串,类似于 Window's 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; 
    } ;


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2827-蚯蚓【队列】

前言 早年一直拿堆过不了&#xff0c;结果发现要用队列 正题 题目链接:https://www.luogu.com.cn/problem/P2827 题目大意 有nnn条蚯蚓&#xff0c;每次选取最长的一条&#xff0c;切成⌊x∗p⌋\lfloor x*p\rfloor⌊x∗p⌋和x−⌊x∗p⌋x-\lfloor x*p\rfloorx−⌊x∗p⌋的两…

.net core DI 注册 Lazy 类型

当我们在 .net core (2.1) 中运行如下代码注入 Lazy<T> 变量的时候&#xff1a;public AccountService(Lazy<IHttpContextAccessor> httpContextAccessor) { }可能会遇到这样的错误提示&#xff1a;InvalidOperationException: Unable to resolve service for type…

操作系统复习笔记 02-03 OS Structure 操作系统结构

02-03操作系统结构&#xff08;OS_Structure&#xff09;[]陈述&#xff1a;1.IO设备与CPU可并行运行。2.每一个设备控制器负责一个设备类型。3.每一个设备控制器有一个局部缓存。4.CPU通过局部缓存与主存交换数据。5.设备控制器通过引起中断通知CPU操作已完成。[]中断机制&…

【深搜】 棋盘 【NOIp普及组 2017 第三题】 (luogu 3956/ssl 2851)

棋盘棋盘棋盘 题目大意&#xff1a; 有一个M*M的棋盘&#xff0c;要从&#xff08;1&#xff0c;1&#xff09;到&#xff08;m,m&#xff09;&#xff0c;中间有n个有颜色的格子&#xff0c;只能踩在有颜色的格子上&#xff0c;跳到不同颜色的格子要花费1元&#xff0c;可以将…

P3332-[ZJOI2013]K大数查询【树套树】

正题 题目链接&#xff1a;https://www.luogu.com.cn/problem/P3332 题目大意 开始nnn个可以重复的集合&#xff0c;要求支持操作 1lrc:1\ l\ r\ c:1 l r c:将ccc加入集合l∼rl\sim rl∼r中2lrk:2\ l\ r\ k:2 l r k:查询l∼rl\sim rl∼r的并集中第kkk大的数 解题思路 此题考…

别跟我谈EF抵抗并发,敢问你到底会不会用EntityFramework

前言一直以来写的博文都是比较温婉型的博文&#xff0c;今天这篇博文算是一篇批判性博文&#xff0c;有问题欢迎探讨&#xff0c;如标题&#xff0c;你到底会不会用EntityFramework啊。你到底会不会用EntityFramework啊面试过三年至六年的同行&#xff0c;作为过面试者到如今作…

操作系统复习笔记 04 Process 进程

[]进程的概念1.进程是操作系统执行的各种程序。2.现在的操作系统多为并发执行&#xff0c;具有许多新的特征。引入并发执行的目的是提高资源利用率。3.OS的基本特征是[并发与共享]。4.顺序环境计算机系统只有一个程序在执行&#xff0c;该程序独占系统的所有资源&#xff0c;其…

【动态规划】 多米诺骨牌 (ssl 1632/luogu 1282)

多米诺骨牌多米诺骨牌多米诺骨牌 Description Input 输入文件的第一行是一个正整数n(1≤n≤1000)&#xff0c;表示多米诺骨牌数。接下来的n行表示n个多米诺骨牌的点数。每行有两个用空格隔开的正整数&#xff0c;表示多米诺骨牌上下方块中的点数a和b&#xff0c;且1≤a&#…

为什么 web 开发人员需要迁移到. NET Core, 并使用 ASP.NET Core MVC 构建 web 和 API

2018 .NET开发者调查报告: .NET Core 是怎么样的状态&#xff0c;这里我们看到了还有非常多的.net开发人员还在观望&#xff0c;本文给大家一个建议。这仅代表我的个人意见, 我有充分的理由推荐.net 程序员使用. net core而不是. net Framework。有些人可能不同意我的观点, 但是…

CF1260C-Infinite Fence【结论题】

正题 题目链接:https://www.luogu.com.cn/problem/CF1260C 题目大意 无数个栏杆&#xff0c;rrr的倍数染成红色&#xff0c;bbb的倍数染成蓝色&#xff0c;是rrr和bbb的倍数的话可以选择一个染色&#xff0c;去掉没有染色的&#xff0c;是否有一种方案使得最长的染色快不超过…

【动态规划】 摆花 【NOIp普及组 2012 第三题】 (ssl 2360/luogu 1077)

摆花摆花摆花 题目大意 有n种花&#xff0c;每种花有ai支&#xff0c;取m支&#xff0c;有多少种取法&#xff1f;&#xff08;同一种花取第1&#xff0c;第3支和取第1&#xff0c;第2支算一种取法&#xff09; 解题方法&#xff1a; 用f[i][j]来表示前i种选j支的方案数&…

操作系统复习笔记 05 Thread 线程

进程的两个基本属性1.拥有资源的独立单位2.可独立调度和分派的基本单位进程的数目不宜过多&#xff0c;进程切换频率不宜过高&#xff0c;限制了并发程度。操作系统的设计目标是&#xff1a;提高并发度、减小系统开销。引入线程的目的是简化线程间的通信&#xff0c;以小的开销…

使用SonarCloud对.NET Core项目进行静态代码分析

本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析。SonarCloud是SonarQube提供的基于云的版本&#xff0c;特别针对于开源项目是免费的。首先&#xff0c;在sonarcloud.io创建一个账号&#xff0c;你可以使用Github/BitBucket/Microsoft Live账户进行注册&#xf…

P6477-[NOI Online #2 提高组]子序列问题【线段树】

正题 题目链接:https://www.luogu.com.cn/problem/P6477 话说这是luogu的冥间数据 题目大意 nnn个数的序列&#xff0c;f(l,r)f(l,r)f(l,r)表示l∼rl\sim rl∼r有多少个不同的数字。 求∑l1n∑rln(f(l,r))2\sum_{l1}^n\sum_{rl}^n(f(l,r))^2l1∑n​rl∑n​(f(l,r))2 解题思路…

操作系统复习笔记 06 CPU Scheduling CPU调度

CPU的三级调度&#xff1a;1.高级调度(Long-term)&#xff1a;作业调度&#xff0c;从外存进内存2.低级调度(Short-term)&#xff1a;进程调度&#xff0c;分配处理机3.中级调度(Medium-term)&#xff1a;对换通过多道程序设计得到CPU的最高使用率。CPU-IO脉冲周期&#xff1a;…

【动态规划】 石子合并问题(环形) (ssl 1597)

石子合并问题石子合并问题石子合并问题 Description 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆&#xff0c;并将新的一堆石子数记为该次合并的得分。试设计一个算法&#xff0c;计算出将n堆石子合并成…

P6102-[EER2]谔运算【位运算】

正题 题目链接:https://www.luogu.com.cn/problem/P6102?contestId26472 题目大意 nnn个数的序列aaa&#xff0c;求 ∑i1n∑j1n∑k1n∑l1n(aioraj)xor(akandal)\sum_{i1}^n\sum_{j1}^n\sum_{k1}^n\sum_{l1}^n(a_i\ or\ a_j)\ xor\ (a_k\ and\ a_l)i1∑n​j1∑n​k1∑n​l1∑n…

操作系统复习笔记 07 Process Synchronization 进程同步

背景&#xff1a;1.对共享数据的并发访问可能导致数据的不一致性。2.要保持数据的一致性&#xff0c;就需要一种保证并发进程正确执行顺序机制。3.解决有界缓冲区问题的共享内存方法在count上存在竞争条件。4.进程间的制约关系&#xff1a;——间接制约&#xff1a;有些资源需要…

【动态规划】拔河比赛 (ssl 1638)

拔河比赛拔河比赛拔河比赛 Description 一个学校举行拔河比赛&#xff0c;所有的人被分成了两组&#xff0c;每个人必须&#xff08;且只能够&#xff09;在其中的一组&#xff0c;要求两个组的人数相差不能超过1&#xff0c;且两个组内的所有人体重加起来尽可能地接近。 In…

特长生考试相关

水一手游记 一大早起来像个那啥一样在校训石前等&#xff08;旁边一群看猴子一样&#xff09; 然后车上点个人就去公费旅游&#xff08;半个小时车程&#xff0c;甚至没有饭吃&#xff09; 然后到那边量完体温见了一下熟人就开始了 T1高精度&#xff0c;历年最难T1还要判负数然…