VB数组揭秘(od调试)
网上貌似没有VB数组调试相关的内容我也是参看搜索的一些信息自己慢慢研究出来的
没地方发就发这好了
首先VB的类型都是作为Variant来表达,想在OD下了解Variant的具体含义就得先弄懂Variant的结构
下面是Variant的完整结构:
typedef struct tagVARIANT VARIANT;
struct tagVARIANT {
union {
struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union {
LONG lVal; /* VT_I4 */
BYTE bVal; /* VT_UI1 */
SHORT iVal; /* VT_I2 */
FLOAT fltVal; /* VT_R4 */
DOUBLE dblVal; /* VT_R8 */
VARIANT_BOOLboolVal; /* VT_BOOL */
_VARIANT_BOOL bool; /* (obsolete) */
SCODE scode; /* VT_ERROR */
CY cyVal; /* VT_CY */
DATE date; /* VT_DATE */
BSTR bstrVal; /* VT_BSTR */
IUnknown * punkVal; /* VT_UNKNOWN */
IDispatch * pdispVal; /* VT_DISPATCH */
SAFEARRAY * parray; /* VT_ARRAY 安全数组类型*/
BYTE * pbVal; /* VT_BYREF|VT_UI1 */
SHORT * piVal; /* VT_BYREF|VT_I2 */
LONG * plVal; /* VT_BYREF|VT_I4 */
FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
_VARIANT_BOOL *pbool; /* (obsolete) */
SCODE * pscode; /* VT_BYREF|VT_ERROR */
CY * pcyVal; /* VT_BYREF|VT_CY */
DATE * pdate; /* VT_BYREF|VT_DATE */
BSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN*/
IDispatch **ppdispVal; /* VT_BYREF|VT_DISPATCH */
SAFEARRAY **pparray; /* VT_BYREF|VT_ARRAY */
VARIANT * pvarVal; /* VT_BYREF|VT_VARIANT*/
PVOID byref; /* Generic ByRef */
CHAR cVal; /* VT_I1 */
USHORT uiVal; /* VT_UI2 */
ULONG ulVal; /* VT_UI4 */
INT intVal; /* VT_INT */
UINT uintVal; /* VT_UINT */
DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL*/
CHAR * pcVal; /* VT_BYREF|VT_I1 */
USHORT * puiVal; /* VT_BYREF|VT_UI2 */
ULONG * pulVal; /* VT_BYREF|VT_UI4 */
INT * pintVal; /* VT_BYREF|VT_INT */
UINT * puintVal; /* VT_BYREF|VT_UINT */
struct __tagBRECORD {
PVOID pvRecord;
IRecordInfo * pRecInfo;
} __VARIANT_NAME_4; /* VT_RECORD */
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
};
第一个word是VARENUM常数下面列出VARENUM常数的结构和代表的含义
typedef unsigned short VARTYPE;
/*
* VARENUM usage key,
*
* * - may appear in a VARIANT
* * - may appear in a TYPEDESC
* * - may appear in an OLE property set
* * - may appear in a Safe Array
*
*
*VT_EMPTY nothing
*VT_NULL SQL style Null
*VT_I2 2 byte signed int
*VT_I4 4 byte signed int
*VT_R4 4 byte real
*VT_R8 8 byte real
*VT_CY currency
*VT_DATE date
*VT_BSTR OLE Automation string
*VT_DISPATCH IDispatch *
*VT_ERROR SCODE
*VT_BOOL True=-1, False=0
*VT_VARIANT VARIANT *
*VT_UNKNOWN IUnknown *
*VT_DECIMAL 16 byte fixed point
*VT_RECORD user defined type
*VT_I1 signed char
*VT_UI1 unsigned char
*VT_UI2 unsigned short
*VT_UI4 unsigned short
*VT_I8 signed 64-bit int
*VT_UI8 unsigned 64-bit int
*VT_INT signed machine int
*VT_UINT unsigned machine int
*VT_VOID C style void
*VT_HRESULT Standard return type
*VT_PTR pointer type
*VT_SAFEARRAY (use VT_ARRAY in VARIANT)
*VT_CARRAY C style array
*VT_USERDEFINED user defined type
*VT_LPSTR null terminated string
*VT_LPWSTR wide null terminated string
*VT_FILETIME FILETIME
*VT_BLOB Length prefixed bytes
*VT_STREAM Name of the stream follows
*VT_STORAGE Name of the storage follows
*VT_STREAMED_OBJECT Stream contains an object
*VT_STORED_OBJECT Storage contains an object
*VT_BLOB_OBJECT Blob contains an object
*VT_CF Clipboard format
*VT_CLSID A Class ID
*VT_VECTOR simple counted array
*VT_ARRAY SAFEARRAY*
*VT_BYREF void* for local use
*VT_BSTR_BLOB Reserved for system use
*/
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_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_BSTR_BLOB = 0xfff,
VT_VECTOR = 0x1000,
VT_ARRAY = 0x2000, 数组
VT_BYREF = 0x4000,
VT_RESERVED = 0x8000,
VT_ILLEGAL = 0xffff,
VT_ILLEGALMASKED = 0xfff,
VT_TYPEMASK = 0xfff
};
**** Hidden Message ***** 学习一下,谢谢搂住
页:
[1]