📄 cvinfo.h
字号:
/*** cvinfo.h - Generic CodeView information definitions
*
* Structures, constants, etc. for accessing and interpreting
* CodeView information.
*
*/
#ifndef _CV_INFO_INCLUDED
#define _CV_INFO_INCLUDED
#ifndef __INLINE
#define __INLINE
#endif
#pragma pack(1)
typedef unsigned long CV_uoff32_t;
typedef long CV_off32_t;
typedef unsigned short CV_uoff16_t;
typedef short CV_off16_t;
typedef unsigned int CV_typ_t;
#if !defined (CV_ZEROLEN)
#define CV_ZEROLEN 1
#endif
#if !defined (FLOAT10)
#if defined (_M_ALPHA) || \
defined (_M_MRX000) || \
((_MSC_VER >= 800) && \
defined(_M_IX86) && \
(_M_IX86 >= 300))
// above ifdef tests for 32-bit compiler and existence of long double support
typedef struct {
char b[10];
} FLOAT10;
#else
typedef long double FLOAT10;
#endif
typedef FLOAT10 REAL10;
#endif
#define CV_SIGNATURE_C6 0L // Actual signature is >64K
#define CV_SIGNATURE_C7 1L // First explicit signature
#define CV_SIGNATURE_32BIT 2L // 32 bit signature
#define CV_SIGNATURE_RESERVED 3L // All signatures from 2 to 64K are reserved
#define CV_MAXOFFSET 0xffffffff
/** CodeView Symbol and Type OMF type information is broken up into two
* ranges. Type indices less than 0x1000 describe type information
* that is frequently used. Type indices above 0x1000 are used to
* describe more complex features such as functions, arrays and
* structures.
*/
/** Primitive types have predefined meaning that is encoded in the
* values of the various bit fields in the value.
*
* A CodeView primitive type is defined as:
*
* 1 1
* 1 089 7654 3 210
* r mode type r sub
*
* Where
* mode is the pointer mode
* type is a type indicator
* sub is a subtype enumeration
* r is a reserved field
*
* See Microsoft Symbol and Type OMF (Version 4.0) for more
* information.
*/
#define CV_MMASK 0x700 // mode mask
#define CV_TMASK 0x0f0 // type mask
#if CC_BIGINT
// can we use the reserved bit ??
#define CV_SMASK 0x008 // subtype mask
#else
#define CV_SMASK 0x007 // subtype mask
#endif
#define CV_MSHIFT 8 // primitive mode right shift count
#define CV_TSHIFT 4 // primitive type right shift count
#define CV_SSHIFT 0 // primitive subtype right shift count
// macros to extract primitive mode, type and size
#define CV_MODE(typ) (((typ) & CV_MMASK) >> CV_MSHIFT)
#define CV_TYPE(typ) (((typ) & CV_TMASK) >> CV_TSHIFT)
#define CV_SUBT(typ) (((typ) & CV_SMASK) >> CV_SSHIFT)
// macros to insert new primitive mode, type and size
#define CV_NEWMODE(typ, nm) ((CV_typ_t)(((typ) & ~CV_MMASK) | ((nm) << CV_MSHIFT)))
#define CV_NEWTYPE(typ, nt) (((typ) & ~CV_TMASK) | ((nt) << CV_TSHIFT))
#define CV_NEWSUBT(typ, ns) (((typ) & ~CV_SMASK) | ((ns) << CV_SSHIFT))
// pointer mode enumeration values
typedef enum CV_prmode_e {
CV_TM_DIRECT = 0, // mode is not a pointer
CV_TM_NPTR = 1, // mode is a near pointer
CV_TM_FPTR = 2, // mode is a far pointer
CV_TM_HPTR = 3, // mode is a huge pointer
CV_TM_NPTR32 = 4, // mode is a 32 bit near pointer
CV_TM_FPTR32 = 5, // mode is a 32 bit far pointer
CV_TM_NPTR64 = 6 // mode is a 64 bit near pointer
#if CC_BIGINT
,
CV_TM_NPTR128 = 7 // mode is a 128 bit near pointer
#endif
} CV_prmode_e;
// type enumeration values
typedef enum CV_type_e {
CV_SPECIAL = 0x00, // special type size values
CV_SIGNED = 0x01, // signed integral size values
CV_UNSIGNED = 0x02, // unsigned integral size values
CV_BOOLEAN = 0x03, // Boolean size values
CV_REAL = 0x04, // real number size values
CV_COMPLEX = 0x05, // complex number size values
CV_SPECIAL2 = 0x06, // second set of special types
CV_INT = 0x07, // integral (int) values
CV_CVRESERVED = 0x0f
} CV_type_e;
// subtype enumeration values for CV_SPECIAL
typedef enum CV_special_e {
CV_SP_NOTYPE = 0x00,
CV_SP_ABS = 0x01,
CV_SP_SEGMENT = 0x02,
CV_SP_VOID = 0x03,
CV_SP_CURRENCY = 0x04,
CV_SP_NBASICSTR = 0x05,
CV_SP_FBASICSTR = 0x06,
CV_SP_NOTTRANS = 0x07
} CV_special_e;
// subtype enumeration values for CV_SPECIAL2
typedef enum CV_special2_e {
CV_S2_BIT = 0x00,
CV_S2_PASCHAR = 0x01 // Pascal CHAR
} CV_special2_e;
// subtype enumeration values for CV_SIGNED, CV_UNSIGNED and CV_BOOLEAN
typedef enum CV_integral_e {
CV_IN_1BYTE = 0x00,
CV_IN_2BYTE = 0x01,
CV_IN_4BYTE = 0x02,
CV_IN_8BYTE = 0x03
#if CC_BIGINT
,
CV_IN_16BYTE = 0x04
#endif
} CV_integral_e;
// subtype enumeration values for CV_REAL and CV_COMPLEX
typedef enum CV_real_e {
CV_RC_REAL32 = 0x00,
CV_RC_REAL64 = 0x01,
CV_RC_REAL80 = 0x02,
CV_RC_REAL128 = 0x03,
CV_RC_REAL48 = 0x04
} CV_real_e;
// subtype enumeration values for CV_INT (really int)
typedef enum CV_int_e {
CV_RI_CHAR = 0x00,
CV_RI_INT1 = 0x00,
CV_RI_WCHAR = 0x01,
CV_RI_UINT1 = 0x01,
CV_RI_INT2 = 0x02,
CV_RI_UINT2 = 0x03,
CV_RI_INT4 = 0x04,
CV_RI_UINT4 = 0x05,
CV_RI_INT8 = 0x06,
CV_RI_UINT8 = 0x07
#if CC_BIGINT
,
CV_RI_INT16 = 0x08,
CV_RI_UINT16 = 0x09
#endif
} CV_int_e;
// macros to check the type of a primitive
#define CV_TYP_IS_DIRECT(typ) (CV_MODE(typ) == CV_TM_DIRECT)
#define CV_TYP_IS_PTR(typ) (CV_MODE(typ) != CV_TM_DIRECT)
#define CV_TYP_IS_NPTR(typ) (CV_MODE(typ) == CV_TM_NPTR)
#define CV_TYP_IS_FPTR(typ) (CV_MODE(typ) == CV_TM_FPTR)
#define CV_TYP_IS_HPTR(typ) (CV_MODE(typ) == CV_TM_HPTR)
#define CV_TYP_IS_NPTR32(typ) (CV_MODE(typ) == CV_TM_NPTR32)
#define CV_TYP_IS_FPTR32(typ) (CV_MODE(typ) == CV_TM_FPTR32)
#if CC_BIGINT
#define CV_TYP_IS_SIGNED(typ) (((CV_TYPE(typ) == CV_SIGNED) && CV_TYP_IS_DIRECT(typ)) || \
(typ == T_INT1) || \
(typ == T_INT2) || \
(typ == T_INT4) || \
(typ == T_INT8) || \
(typ == T_INT16) || \
(typ == T_RCHAR))
#define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED) && CV_TYP_IS_DIRECT(typ)) || \
(typ == T_UINT1) || \
(typ == T_UINT2) || \
(typ == T_UINT4) || \
(typ == T_UINT8) || \
(typ == T_UINT16))
#else
#define CV_TYP_IS_SIGNED(typ) (((CV_TYPE(typ) == CV_SIGNED) && CV_TYP_IS_DIRECT(typ)) || \
(typ == T_INT1) || \
(typ == T_INT2) || \
(typ == T_INT4) || \
(typ == T_INT8) || \
(typ == T_RCHAR))
#define CV_TYP_IS_UNSIGNED(typ) (((CV_TYPE(typ) == CV_UNSIGNED) && CV_TYP_IS_DIRECT(typ)) || \
(typ == T_UINT1) || \
(typ == T_UINT2) || \
(typ == T_UINT4) || \
(typ == T_UINT8))
#endif
#define CV_TYP_IS_REAL(typ) ((CV_TYPE(typ) == CV_REAL) && CV_TYP_IS_DIRECT(typ))
#define CV_FIRST_NONPRIM 0x1000
#define CV_IS_PRIMITIVE(typ) ((typ) < CV_FIRST_NONPRIM)
#define CV_TYP_IS_COMPLEX(typ) ((CV_TYPE(typ) == CV_COMPLEX) && CV_TYP_IS_DIRECT(typ))
// selected values for type_index - for a more complete definition, see
// Microsoft Symbol and Type OMF document
// Special Types
#define T_NOTYPE 0x0000 // uncharacterized type (no type)
#define T_ABS 0x0001 // absolute symbol
#define T_SEGMENT 0x0002 // segment type
#define T_VOID 0x0003 // void
#define T_PVOID 0x0103 // near pointer to void
#define T_PFVOID 0x0203 // far pointer to void
#define T_PHVOID 0x0303 // huge pointer to void
#define T_32PVOID 0x0403 // 16:32 near pointer to void
#define T_32PFVOID 0x0503 // 16:32 far pointer to void
#define T_CURRENCY 0x0004 // BASIC 8 byte currency value
#define T_NBASICSTR 0x0005 // Near BASIC string
#define T_FBASICSTR 0x0006 // Far BASIC string
#define T_NOTTRANS 0x0007 // type not translated by cvpack
#define T_BIT 0x0060 // bit
#define T_PASCHAR 0x0061 // Pascal CHAR
// Character types
#define T_CHAR 0x0010 // 8 bit signed
#define T_UCHAR 0x0020 // 8 bit unsigned
#define T_PCHAR 0x0110 // near pointer to 8 bit signed
#define T_PUCHAR 0x0120 // near pointer to 8 bit unsigned
#define T_PFCHAR 0x0210 // far pointer to 8 bit signed
#define T_PFUCHAR 0x0220 // far pointer to 8 bit unsigned
#define T_PHCHAR 0x0310 // huge pointer to 8 bit signed
#define T_PHUCHAR 0x0320 // huge pointer to 8 bit unsigned
#define T_32PCHAR 0x0410 // 16:32 near pointer to 8 bit signed
#define T_32PUCHAR 0x0420 // 16:32 near pointer to 8 bit unsigned
#define T_32PFCHAR 0x0510 // 16:32 far pointer to 8 bit signed
#define T_32PFUCHAR 0x0520 // 16:32 far pointer to 8 bit unsigned
// really a character types
#define T_RCHAR 0x0070 // really a char
#define T_PRCHAR 0x0170 // 16:16 near pointer to a real char
#define T_PFRCHAR 0x0270 // 16:16 far pointer to a real char
#define T_PHRCHAR 0x0370 // 16:16 huge pointer to a real char
#define T_32PRCHAR 0x0470 // 16:32 near pointer to a real char
#define T_32PFRCHAR 0x0570 // 16:32 far pointer to a real char
// really a wide character types
#define T_WCHAR 0x0071 // wide char
#define T_PWCHAR 0x0171 // 16:16 near pointer to a wide char
#define T_PFWCHAR 0x0271 // 16:16 far pointer to a wide char
#define T_PHWCHAR 0x0371 // 16:16 huge pointer to a wide char
#define T_32PWCHAR 0x0471 // 16:32 near pointer to a wide char
#define T_32PFWCHAR 0x0571 // 16:32 far pointer to a wide char
// 8 bit int types
#define T_INT1 0x0068 // 8 bit signed int
#define T_UINT1 0x0069 // 8 bit unsigned int
#define T_PINT1 0x0168 // near pointer to 8 bit signed int
#define T_PUINT1 0x0169 // near pointer to 8 bit unsigned int
#define T_PFINT1 0x0268 // far pointer to 8 bit signed int
#define T_PFUINT1 0x0269 // far pointer to 8 bit unsigned int
#define T_PHINT1 0x0368 // huge pointer to 8 bit signed int
#define T_PHUINT1 0x0369 // huge pointer to 8 bit unsigned int
#define T_32PINT1 0x0468 // 16:32 near pointer to 8 bit signed int
#define T_32PUINT1 0x0469 // 16:32 near pointer to 8 bit unsigned int
#define T_32PFINT1 0x0568 // 16:32 far pointer to 8 bit signed int
#define T_32PFUINT1 0x0569 // 16:32 far pointer to 8 bit unsigned int
// 16 bit short types
#define T_SHORT 0x0011 // 16 bit signed
#define T_USHORT 0x0021 // 16 bit unsigned
#define T_PSHORT 0x0111 // near pointer to 16 bit signed
#define T_PUSHORT 0x0121 // near pointer to 16 bit unsigned
#define T_PFSHORT 0x0211 // far pointer to 16 bit signed
#define T_PFUSHORT 0x0221 // far pointer to 16 bit unsigned
#define T_PHSHORT 0x0311 // huge pointer to 16 bit signed
#define T_PHUSHORT 0x0321 // huge pointer to 16 bit unsigned
#define T_32PSHORT 0x0411 // 16:32 near pointer to 16 bit signed
#define T_32PUSHORT 0x0421 // 16:32 near pointer to 16 bit unsigned
#define T_32PFSHORT 0x0511 // 16:32 far pointer to 16 bit signed
#define T_32PFUSHORT 0x0521 // 16:32 far pointer to 16 bit unsigned
// 16 bit int types
#define T_INT2 0x0072 // 16 bit signed int
#define T_UINT2 0x0073 // 16 bit unsigned int
#define T_PINT2 0x0172 // near pointer to 16 bit signed int
#define T_PUINT2 0x0173 // near pointer to 16 bit unsigned int
#define T_PFINT2 0x0272 // far pointer to 16 bit signed int
#define T_PFUINT2 0x0273 // far pointer to 16 bit unsigned int
#define T_PHINT2 0x0372 // huge pointer to 16 bit signed int
#define T_PHUINT2 0x0373 // huge pointer to 16 bit unsigned int
#define T_32PINT2 0x0472 // 16:32 near pointer to 16 bit signed int
#define T_32PUINT2 0x0473 // 16:32 near pointer to 16 bit unsigned int
#define T_32PFINT2 0x0572 // 16:32 far pointer to 16 bit signed int
#define T_32PFUINT2 0x0573 // 16:32 far pointer to 16 bit unsigned int
// 32 bit long types
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -