求标准回溯率的标准定义

来源:学生作业帮助网 编辑:作业帮 时间:2024/07/05 23:50:24
求标准回溯率的标准定义
xV]oP+obvsIWZ )mS>63SҖ\YxN/4~%v_X?^=Oy='dGwǃ7o?N^"O?l+ll??~{6|uο _&@`xttӟ_pW{ v@JE)Ɋ9 {U]'AZ.h,dV!@<m4`uLj[62m[,EDV o|΀u F}5\" XC`4]:n є&(*wIr#G xԒM ٱ0%[GaJJ3:PXu!Y9Rri%$)ktB/%љ-~2M\ @2ysFǘs9t443m'[S#)V6n]Hu[U}-L}ǗW 1"Q&l^ y O$c^t W`~Y8Iy\CEvLBGoYcVP&[Zn*1Z5a[nҮX!bj:$>=`Ks6Ln2>H0xu#$xH~94 !ܛKV*EYbE_G]zt 3=,pbylY97ҡC[7:jUK&T%΁j4,o\1c5`".J&sх)*\03:chB3-;F=qQB(˪ "?|;%9FR3q,"

求标准回溯率的标准定义
求标准回溯率的标准定义

求标准回溯率的标准定义
以下是回溯资料的 C 描述:
复制typedef enum _UNWIND_OP_CODES {
UWOP_PUSH_NONVOL = 0, /* info == register number */
UWOP_ALLOC_LARGE, /* no info, alloc size in next 2 slots */
UWOP_ALLOC_SMALL, /* info == size of allocation / 8 - 1 */
UWOP_SET_FPREG, /* no info, FP = RSP + UNWIND_INFO.FPRegOffset*16 */
UWOP_SAVE_NONVOL, /* info == register number, offset in next slot */
UWOP_SAVE_NONVOL_FAR, /* info == register number, offset in next 2 slots */
UWOP_SAVE_XMM128, /* info == XMM reg number, offset in next slot */
UWOP_SAVE_XMM128_FAR, /* info == XMM reg number, offset in next 2 slots */
UWOP_PUSH_MACHFRAME /* info == 0: no error-code, 1: error-code */
} UNWIND_CODE_OPS;
typedef union _UNWIND_CODE {
struct {
UBYTE CodeOffset;
UBYTE UnwindOp : 4;
UBYTE OpInfo : 4;
};
USHORT FrameOffset;
} UNWIND_CODE, *PUNWIND_CODE;
#define UNW_FLAG_EHANDLER 0x01
#define UNW_FLAG_UHANDLER 0x02
#define UNW_FLAG_CHAININFO 0x04
typedef struct _UNWIND_INFO {
UBYTE Version : 3;
UBYTE Flags : 5;
UBYTE SizeOfProlog;
UBYTE CountOfCodes;
UBYTE FrameRegister : 4;
UBYTE FrameOffset : 4;
UNWIND_CODE UnwindCode[1];
/* UNWIND_CODE MoreUnwindCode[((CountOfCodes + 1) & ~1) - 1];
* union {
* OPTIONAL ULONG ExceptionHandler;
* OPTIONAL ULONG FunctionEntry;
* };
* OPTIONAL ULONG ExceptionData[]; */
} UNWIND_INFO, *PUNWIND_INFO;
typedef struct _RUNTIME_FUNCTION {
ULONG BeginAddress;
ULONG EndAddress;
ULONG UnwindData;
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
#define GetUnwindCodeEntry(info, index) \
((info)->UnwindCode[index])
#define GetLanguageSpecificDataPtr(info) \
((PVOID)&GetUnwindCodeEntry((info),((info)->CountOfCodes + 1) & ~1))
#define GetExceptionHandler(base, info) \
((PEXCEPTION_HANDLER)((base) + *(PULONG)GetLanguageSpecificDataPtr(info)))
#define GetChainedFunctionEntry(base, info) \
((PRUNTIME_FUNCTION)((base) + *(PULONG)GetLanguageSpecificDataPtr(info)))
#define GetExceptionDataPtr(info) \
((PVOID)((PULONG)GetLanguageSpecificData(info) + 1)