Pin
Classes | Typedefs | Enumerations | Functions | Variables
LEVEL_BASE Namespace Reference

Classes

class  PIN_ERROR_DESCRIPTOR
class  KNOBVALUE
class  KNOBVALUE_LIST
class  KNOB_BASE
class  KNOB
class  KNOB_COMMENT
class  ADDRESS_RANGE
struct  PIN_LOCK
class  PARSER
class  COMMAND_LINE_ARGUMENTS
struct  DECSTR
struct  HEXSTR
struct  FLTSTR
class  SimpleXMLParser
struct  REGDEF_ENTRY
struct  ImageLoaderInfo
struct  LINUX_LOADER_IMAGE_INFO

Typedefs

typedef struct EXCEPTION_INFO EXCEPTION_INFO
typedef PINVM::PINSYNC_POD_LOCK PIN_MUTEX
typedef PINVM::PINSYNC_POD_RWLOCK PIN_RWMUTEX
typedef
PINVM::PINSYNC_POD_SEMAPHORE 
PIN_SEMAPHORE
typedef INT32 TLS_KEY
typedef UINT8 REGTYPE
typedef UINT64 REG_CLASS_BITS
typedef VOID(* AFUNPTR )()
typedef VOID *(* THREAD_STARTROUTINE )(void *)
typedef VOID(* DESTRUCTFUN )(void *)
typedef UINT16 OPCODE
typedef PREDICATE_IA32 PREDICATE

Enumerations

enum  EXCEPTION_CLASS {
  EXCEPTCLASS_NONE,
  EXCEPTCLASS_UNKNOWN,
  EXCEPTCLASS_ACCESS_FAULT,
  EXCEPTCLASS_INVALID_INS,
  EXCEPTCLASS_INT_ERROR,
  EXCEPTCLASS_FP_ERROR,
  EXCEPTCLASS_MULTIPLE_FP_ERROR,
  EXCEPTCLASS_DEBUG,
  EXCEPTCLASS_OS
}
enum  EXCEPTION_CODE {
  EXCEPTCODE_NONE,
  EXCEPTCODE_ACCESS_INVALID_ADDRESS,
  EXCEPTCODE_ACCESS_DENIED,
  EXCEPTCODE_ACCESS_INVALID_PAGE,
  EXCEPTCODE_ACCESS_MISALIGNED,
  EXCEPTCODE_ILLEGAL_INS,
  EXCEPTCODE_PRIVILEGED_INS,
  EXCEPTCODE_INT_DIVIDE_BY_ZERO,
  EXCEPTCODE_INT_OVERFLOW_TRAP,
  EXCEPTCODE_INT_BOUNDS_EXCEEDED,
  EXCEPTCODE_X87_DIVIDE_BY_ZERO,
  EXCEPTCODE_X87_OVERFLOW,
  EXCEPTCODE_X87_UNDERFLOW,
  EXCEPTCODE_X87_INEXACT_RESULT,
  EXCEPTCODE_X87_INVALID_OPERATION,
  EXCEPTCODE_X87_DENORMAL_OPERAND,
  EXCEPTCODE_X87_STACK_ERROR,
  EXCEPTCODE_SIMD_DIVIDE_BY_ZERO,
  EXCEPTCODE_SIMD_OVERFLOW,
  EXCEPTCODE_SIMD_UNDERFLOW,
  EXCEPTCODE_SIMD_INEXACT_RESULT,
  EXCEPTCODE_SIMD_INVALID_OPERATION,
  EXCEPTCODE_SIMD_DENORMAL_OPERAND,
  EXCEPTCODE_DBG_BREAKPOINT_TRAP,
  EXCEPTCODE_DBG_SINGLE_STEP_TRAP,
  EXCEPTCODE_ACCESS_WINDOWS_GUARD_PAGE,
  EXCEPTCODE_ACCESS_WINDOWS_STACK_OVERFLOW,
  EXCEPTCODE_WINDOWS,
  EXCEPTCODE_RECEIVED_UNKNOWN,
  EXCEPTCODE_RECEIVED_ACCESS_FAULT,
  EXCEPTCODE_RECEIVED_AMBIGUOUS_X87,
  EXCEPTCODE_RECEIVED_AMBIGUOUS_SIMD
}
enum  FAULTY_ACCESS_TYPE {
  FAULTY_ACCESS_TYPE_UNKNOWN,
  FAULTY_ACCESS_READ,
  FAULTY_ACCESS_WRITE,
  FAULTY_ACCESS_EXECUTE
}
enum  FPERROR {
  FPERROR_DIVIDE_BY_ZERO = (1<<0),
  FPERROR_OVERFLOW = (1<<1),
  FPERROR_UNDERFLOW = (1<<2),
  FPERROR_INEXACT_RESULT = (1<<3),
  FPERROR_INVALID_OPERATION = (1<<4),
  FPERROR_DENORMAL_OPERAND = (1<<5),
  FPERROR_X87_STACK_ERROR = (1<<6)
}
enum  KNOB_MODE {
  KNOB_MODE_INVALID,
  KNOB_MODE_COMMENT,
  KNOB_MODE_WRITEONCE,
  KNOB_MODE_OVERWRITE,
  KNOB_MODE_ACCUMULATE,
  KNOB_MODE_APPEND,
  KNOB_MODE_LAST
}
enum  PREDICATE_IA32 {
  PREDICATE_ALWAYS_TRUE,
  PREDICATE_INVALID,
  PREDICATE_BELOW,
  PREDICATE_BELOW_OR_EQUAL,
  PREDICATE_LESS,
  PREDICATE_LESS_OR_EQUAL,
  PREDICATE_NOT_BELOW,
  PREDICATE_NOT_BELOW_OR_EQUAL,
  PREDICATE_NOT_LESS,
  PREDICATE_NOT_LESS_OR_EQUAL,
  PREDICATE_NOT_OVERFLOW,
  PREDICATE_NOT_PARITY,
  PREDICATE_NOT_SIGN,
  PREDICATE_NOT_ZERO,
  PREDICATE_OVERFLOW,
  PREDICATE_PARITY,
  PREDICATE_SIGN,
  PREDICATE_ZERO,
  PREDICATE_CX_NON_ZERO,
  PREDICATE_ECX_NON_ZERO,
  PREDICATE_RCX_NON_ZERO,
  PREDICATE_SAVED_GCX_NON_ZERO,
  PREDICATE_LAST
}
enum  REG {
  REG_INVALID_ = 0,
  REG_GR_BASE = REG_RBASE,
  REG_RDI = REG_GR_BASE,
  REG_GDI = REG_RDI,
  REG_RSI,
  REG_GSI = REG_RSI,
  REG_RBP,
  REG_GBP = REG_RBP,
  REG_RSP,
  REG_STACK_PTR = REG_RSP,
  REG_RBX,
  REG_GBX = REG_RBX,
  REG_RDX,
  REG_GDX = REG_RDX,
  REG_RCX,
  REG_GCX = REG_RCX,
  REG_RAX,
  REG_GAX = REG_RAX,
  REG_R8,
  REG_R9,
  REG_R10,
  REG_R11,
  REG_R12,
  REG_R13,
  REG_R14,
  REG_R15,
  REG_GR_LAST = REG_R15,
  REG_SEG_BASE,
  REG_SEG_CS = REG_SEG_BASE,
  REG_SEG_SS,
  REG_SEG_DS,
  REG_SEG_ES,
  REG_SEG_FS,
  REG_SEG_GS,
  REG_SEG_LAST = REG_SEG_GS,
  REG_RFLAGS,
  REG_GFLAGS = REG_RFLAGS,
  REG_RIP,
  REG_INST_PTR = REG_RIP,
  REG_AL,
  REG_AH,
  REG_AX,
  REG_CL,
  REG_CH,
  REG_CX,
  REG_DL,
  REG_DH,
  REG_DX,
  REG_BL,
  REG_BH,
  REG_BX,
  REG_BP,
  REG_SI,
  REG_DI,
  REG_SP,
  REG_FLAGS,
  REG_IP,
  REG_EDI,
  REG_DIL,
  REG_ESI,
  REG_SIL,
  REG_EBP,
  REG_BPL,
  REG_ESP,
  REG_SPL,
  REG_EBX,
  REG_EDX,
  REG_ECX,
  REG_EAX,
  REG_EFLAGS,
  REG_EIP,
  REG_R8B,
  REG_R8W,
  REG_R8D,
  REG_R9B,
  REG_R9W,
  REG_R9D,
  REG_R10B,
  REG_R10W,
  REG_R10D,
  REG_R11B,
  REG_R11W,
  REG_R11D,
  REG_R12B,
  REG_R12W,
  REG_R12D,
  REG_R13B,
  REG_R13W,
  REG_R13D,
  REG_R14B,
  REG_R14W,
  REG_R14D,
  REG_R15B,
  REG_R15W,
  REG_R15D,
  REG_MM_BASE,
  REG_MM0 = REG_MM_BASE,
  REG_MM1,
  REG_MM2,
  REG_MM3,
  REG_MM4,
  REG_MM5,
  REG_MM6,
  REG_MM7,
  REG_MM_LAST = REG_MM7,
  REG_XMM_BASE,
  REG_FIRST_FP_REG = REG_XMM_BASE,
  REG_XMM0 = REG_XMM_BASE,
  REG_XMM1,
  REG_XMM2,
  REG_XMM3,
  REG_XMM4,
  REG_XMM5,
  REG_XMM6,
  REG_XMM7,
  REG_XMM8,
  REG_XMM9,
  REG_XMM10,
  REG_XMM11,
  REG_XMM12,
  REG_XMM13,
  REG_XMM14,
  REG_XMM15,
  REG_XMM_SSE_LAST = REG_XMM15,
  REG_XMM_AVX_LAST = REG_XMM_SSE_LAST,
  REG_XMM_AVX512_HI16_FIRST,
  REG_XMM16 = REG_XMM_AVX512_HI16_FIRST,
  REG_XMM17,
  REG_XMM18,
  REG_XMM19,
  REG_XMM20,
  REG_XMM21,
  REG_XMM22,
  REG_XMM23,
  REG_XMM24,
  REG_XMM25,
  REG_XMM26,
  REG_XMM27,
  REG_XMM28,
  REG_XMM29,
  REG_XMM30,
  REG_XMM31,
  REG_XMM_AVX512_HI16_LAST = REG_XMM31,
  REG_XMM_AVX512_LAST = REG_XMM_AVX512_HI16_LAST,
  REG_XMM_LAST = REG_XMM_AVX512_LAST,
  REG_YMM_BASE,
  REG_YMM0 = REG_YMM_BASE,
  REG_YMM1,
  REG_YMM2,
  REG_YMM3,
  REG_YMM4,
  REG_YMM5,
  REG_YMM6,
  REG_YMM7,
  REG_YMM8,
  REG_YMM9,
  REG_YMM10,
  REG_YMM11,
  REG_YMM12,
  REG_YMM13,
  REG_YMM14,
  REG_YMM15,
  REG_YMM_AVX_LAST = REG_YMM15,
  REG_YMM_AVX512_HI16_FIRST,
  REG_YMM16 = REG_YMM_AVX512_HI16_FIRST,
  REG_YMM17,
  REG_YMM18,
  REG_YMM19,
  REG_YMM20,
  REG_YMM21,
  REG_YMM22,
  REG_YMM23,
  REG_YMM24,
  REG_YMM25,
  REG_YMM26,
  REG_YMM27,
  REG_YMM28,
  REG_YMM29,
  REG_YMM30,
  REG_YMM31,
  REG_YMM_AVX512_HI16_LAST = REG_YMM31,
  REG_YMM_AVX512_LAST = REG_YMM_AVX512_HI16_LAST,
  REG_YMM_LAST = REG_YMM_AVX512_LAST,
  REG_ZMM_BASE,
  REG_ZMM0 = REG_ZMM_BASE,
  REG_ZMM1,
  REG_ZMM2,
  REG_ZMM3,
  REG_ZMM4,
  REG_ZMM5,
  REG_ZMM6,
  REG_ZMM7,
  REG_ZMM8,
  REG_ZMM9,
  REG_ZMM10,
  REG_ZMM11,
  REG_ZMM12,
  REG_ZMM13,
  REG_ZMM14,
  REG_ZMM15,
  REG_ZMM_AVX512_SPLIT_LAST = REG_ZMM15,
  REG_ZMM_AVX512_HI16_FIRST,
  REG_ZMM16 = REG_ZMM_AVX512_HI16_FIRST,
  REG_ZMM17,
  REG_ZMM18,
  REG_ZMM19,
  REG_ZMM20,
  REG_ZMM21,
  REG_ZMM22,
  REG_ZMM23,
  REG_ZMM24,
  REG_ZMM25,
  REG_ZMM26,
  REG_ZMM27,
  REG_ZMM28,
  REG_ZMM29,
  REG_ZMM30,
  REG_ZMM31,
  REG_ZMM_AVX512_HI16_LAST = REG_ZMM31,
  REG_ZMM_AVX512_LAST = REG_ZMM_AVX512_HI16_LAST,
  REG_ZMM_LAST = REG_ZMM_AVX512_LAST,
  REG_K_BASE,
  REG_K0 = REG_K_BASE,
  REG_IMPLICIT_FULL_MASK = REG_K0,
  REG_K1,
  REG_K2,
  REG_K3,
  REG_K4,
  REG_K5,
  REG_K6,
  REG_K7,
  REG_K_LAST = REG_K7,
  REG_MXCSR,
  REG_MXCSRMASK,
  REG_ORIG_RAX,
  REG_ORIG_GAX = REG_ORIG_RAX,
  REG_FPST_BASE,
  REG_FPSTATUS_BASE = REG_FPST_BASE,
  REG_FPCW = REG_FPSTATUS_BASE,
  REG_FPSW,
  REG_FPTAG,
  REG_FPIP_OFF,
  REG_FPIP_SEL,
  REG_FPOPCODE,
  REG_FPDP_OFF,
  REG_FPDP_SEL,
  REG_FPSTATUS_LAST = REG_FPDP_SEL,
  REG_FPTAG_FULL,
  REG_ST_BASE,
  REG_ST0 = REG_ST_BASE,
  REG_ST1,
  REG_ST2,
  REG_ST3,
  REG_ST4,
  REG_ST5,
  REG_ST6,
  REG_ST7,
  REG_ST_LAST = REG_ST7,
  REG_FPST_LAST = REG_ST_LAST,
  REG_DR_BASE,
  REG_DR0 = REG_DR_BASE,
  REG_DR1,
  REG_DR2,
  REG_DR3,
  REG_DR4,
  REG_DR5,
  REG_DR6,
  REG_DR7,
  REG_DR_LAST = REG_DR7,
  REG_CR_BASE,
  REG_CR0 = REG_CR_BASE,
  REG_CR1,
  REG_CR2,
  REG_CR3,
  REG_CR4,
  REG_CR_LAST = REG_CR4,
  REG_TSSR,
  REG_LDTR,
  REG_TR_BASE,
  REG_TR = REG_TR_BASE,
  REG_TR3,
  REG_TR4,
  REG_TR5,
  REG_TR6,
  REG_TR7,
  REG_TR_LAST = REG_TR7,
  REG_SEG_GS_BASE = REG_TOOL_BASE,
  REG_SEG_FS_BASE,
  REG_INST_BASE,
  REG_INST_SCRATCH_BASE = REG_INST_BASE,
  REG_INST_G0 = REG_INST_SCRATCH_BASE,
  REG_INST_G1,
  REG_INST_G2,
  REG_INST_G3,
  REG_INST_G4,
  REG_INST_G5,
  REG_INST_G6,
  REG_INST_G7,
  REG_INST_G8,
  REG_INST_G9,
  REG_INST_G10,
  REG_INST_G11,
  REG_INST_G12,
  REG_INST_G13,
  REG_INST_G14,
  REG_INST_G15,
  REG_INST_G16,
  REG_INST_G17,
  REG_INST_G18,
  REG_INST_G19,
  REG_INST_G20,
  REG_INST_G21,
  REG_INST_G22,
  REG_INST_G23,
  REG_INST_G24,
  REG_INST_G25,
  REG_INST_G26,
  REG_INST_G27,
  REG_INST_G28,
  REG_INST_G29,
  REG_INST_TOOL_FIRST = REG_INST_G0,
  REG_INST_TOOL_LAST = REG_INST_G29,
  REG_BUF_BASE0,
  REG_BUF_BASE1,
  REG_BUF_BASE2,
  REG_BUF_BASE3,
  REG_BUF_BASE4,
  REG_BUF_BASE5,
  REG_BUF_BASE6,
  REG_BUF_BASE7,
  REG_BUF_BASE8,
  REG_BUF_BASE9,
  REG_BUF_BASE_LAST = REG_BUF_BASE9,
  REG_BUF_END0,
  REG_BUF_END1,
  REG_BUF_END2,
  REG_BUF_END3,
  REG_BUF_END4,
  REG_BUF_END5,
  REG_BUF_END6,
  REG_BUF_END7,
  REG_BUF_END8,
  REG_BUF_END9,
  REG_BUF_ENDLAST = REG_BUF_END9,
  REG_BUF_LAST = REG_BUF_ENDLAST,
  REG_INST_SCRATCH_LAST = REG_BUF_LAST,
  REG_INST_G0D,
  REG_INST_G1D,
  REG_INST_G2D,
  REG_INST_G3D,
  REG_INST_G4D,
  REG_INST_G5D,
  REG_INST_G6D,
  REG_INST_G7D,
  REG_INST_G8D,
  REG_INST_G9D,
  REG_INST_G10D,
  REG_INST_G11D,
  REG_INST_G12D,
  REG_INST_G13D,
  REG_INST_G14D,
  REG_INST_G15D,
  REG_INST_G16D,
  REG_INST_G17D,
  REG_INST_G18D,
  REG_INST_G19D,
  REG_INST_G20D,
  REG_INST_G21D,
  REG_INST_G22D,
  REG_INST_G23D,
  REG_INST_G24D,
  REG_INST_G25D,
  REG_INST_G26D,
  REG_INST_G27D,
  REG_INST_G28D,
  REG_INST_G29D,
  REG_TOOL_LAST = REG_INST_G29D,
  REG_LAST
}
enum  REGNAME { REGNAME_LAST }
enum  REGWIDTH {
  REGWIDTH_8 = 0,
  REGWIDTH_16 = 1,
  REGWIDTH_32 = 2,
  REGWIDTH_64 = 3,
  REGWIDTH_80,
  REGWIDTH_128,
  REGWIDTH_256,
  REGWIDTH_512,
  REGWIDTH_INVALID,
  REGWIDTH_NATIVE = REGWIDTH_64
}
enum  REG_CLASS {
  REG_CLASS_NONE = 0,
  REG_CLASS_PSEUDO,
  REG_CLASS_GR,
  REG_CLASS_GRU8,
  REG_CLASS_GRL8,
  REG_CLASS_GRH16,
  REG_CLASS_GRH32,
  REG_CLASS_SEG,
  REG_CLASS_MM,
  REG_CLASS_XMM,
  REG_CLASS_YMM,
  REG_CLASS_ZMM,
  REG_CLASS_K,
  REG_CLASS_FPST,
  REG_CLASS_ST,
  REG_CLASS_CR,
  REG_CLASS_DR,
  REG_CLASS_TR,
  REG_CLASS_FLAGS,
  REG_CLASS_FLAGS16,
  REG_CLASS_FLAGS32,
  REG_CLASS_STATUS_FLAGS,
  REG_CLASS_DFLAG,
  REG_CLASS_MXCSR,
  REG_CLASS_MXCSRMASK,
  REG_CLASS_IP,
  REG_CLASS_IP16,
  REG_CLASS_IP32,
  REG_CLASS_ARCH,
  REG_CLASS_PIN_GR,
  REG_CLASS_PIN_GRU8,
  REG_CLASS_PIN_GRL8,
  REG_CLASS_PIN_GRH16,
  REG_CLASS_PIN_GRH32,
  REG_CLASS_PIN_XMM,
  REG_CLASS_PIN_YMM,
  REG_CLASS_PIN_ZMM,
  REG_CLASS_PIN_K,
  REG_CLASS_PIN_MXCSR,
  REG_CLASS_PIN_FLAGS,
  REG_CLASS_PIN_STATUS_FLAGS,
  REG_CLASS_PIN_DFLAG
}
enum  REG_SUBCLASS {
  REG_SUBCLASS_NONE = 0,
  REG_SUBCLASS_REX,
  REG_SUBCLASS_FULL_STACKPTR,
  REG_SUBCLASS_PIN_FULL_STACKPTR,
  REG_SUBCLASS_PIN_TMP,
  REG_SUBCLASS_PIN_INST_GR,
  REG_SUBCLASS_PIN_INST_GR_H32,
  REG_SUBCLASS_PIN_INST_BUF,
  REG_SUBCLASS_PIN_INST_COND
}

Functions

NATIVE_TID SlowGetTid ()
VOID PIN_InitExceptionInfo (EXCEPTION_INFO *pExceptInfo, EXCEPTION_CODE exceptCode, ADDRINT exceptAddress)
VOID PIN_InitAccessFaultInfo (EXCEPTION_INFO *pExceptInfo, EXCEPTION_CODE exceptCode, ADDRINT exceptAddress, ADDRINT accessAddress, FAULTY_ACCESS_TYPE accessType=FAULTY_ACCESS_TYPE_UNKNOWN)
VOID PIN_InitWindowsExceptionInfo (EXCEPTION_INFO *pExceptInfo, UINT32 sysExceptCode, ADDRINT exceptAddress, UINT32 numArgs=0, const ADDRINT *pArgs=0)
EXCEPTION_CODE PIN_GetExceptionCode (const EXCEPTION_INFO *pExceptInfo)
EXCEPTION_CLASS PIN_GetExceptionClass (EXCEPTION_CODE exceptCode)
ADDRINT PIN_GetExceptionAddress (const EXCEPTION_INFO *pExceptInfo)
VOID PIN_SetExceptionAddress (EXCEPTION_INFO *pExceptInfo, ADDRINT exceptAddress)
FAULTY_ACCESS_TYPE PIN_GetFaultyAccessType (const EXCEPTION_INFO *pExceptInfo)
BOOL PIN_GetFaultyAccessAddress (const EXCEPTION_INFO *pExceptInfo, ADDRINT *pAccessAddress)
UINT32 PIN_GetFpErrorSet (const EXCEPTION_INFO *pExceptInfo)
UINT32 PIN_GetWindowsExceptionCode (const EXCEPTION_INFO *pExceptInfo)
UINT32 PIN_CountWindowsExceptionArguments (const EXCEPTION_INFO *pExceptInfo)
ADDRINT PIN_GetWindowsExceptionArgument (const EXCEPTION_INFO *pExceptInfo, UINT32 argNum)
std::string PIN_ExceptionToString (const EXCEPTION_INFO *pExceptInfo)
LOCALVAR KNOB_COMMENT KnobUserAndPintoolFamily ("user&pintool","General switches (available in pin and tool)")
LOCALVAR KNOB_COMMENT KnobMemoryConstraintsFamily ("user:memory","Knobs for constraining memory usage")
VOID PIN_InitLock (PIN_LOCK *lock)
VOID PIN_GetLock (PIN_LOCK *lock, INT32 val)
INT32 PIN_ReleaseLock (PIN_LOCK *lock)
BOOL PIN_MutexInit (PIN_MUTEX *lock)
VOID PIN_MutexFini (PIN_MUTEX *lock)
VOID PIN_MutexLock (PIN_MUTEX *lock)
VOID PIN_MutexUnlock (PIN_MUTEX *lock)
BOOL PIN_MutexTryLock (PIN_MUTEX *lock)
BOOL PIN_RWMutexInit (PIN_RWMUTEX *lock)
VOID PIN_RWMutexFini (PIN_RWMUTEX *lock)
VOID PIN_RWMutexReadLock (PIN_RWMUTEX *lock)
VOID PIN_RWMutexWriteLock (PIN_RWMUTEX *lock)
VOID PIN_RWMutexUnlock (PIN_RWMUTEX *lock)
BOOL PIN_RWMutexTryReadLock (PIN_RWMUTEX *lock)
BOOL PIN_RWMutexTryWriteLock (PIN_RWMUTEX *lock)
BOOL PIN_SemaphoreInit (PIN_SEMAPHORE *sem)
VOID PIN_SemaphoreFini (PIN_SEMAPHORE *sem)
VOID PIN_SemaphoreSet (PIN_SEMAPHORE *sem)
VOID PIN_SemaphoreClear (PIN_SEMAPHORE *sem)
BOOL PIN_SemaphoreIsSet (PIN_SEMAPHORE *sem)
VOID PIN_SemaphoreWait (PIN_SEMAPHORE *sem)
BOOL PIN_SemaphoreTimedWait (PIN_SEMAPHORE *sem, unsigned timeout)
LOCALVAR KNOB_COMMENT KnobStatFamily ("supported:stat","Statistic switches")
VOID SetAddress0x (BOOL val)
BOOL CharIsSpace (CHAR c)
CHAR CharToUpper (CHAR c)
std::string ptrstr (const VOID *val)
std::string StringFromAddrint (ADDRINT l)
std::string StringFromUint64 (UINT64 l)
std::string StringDec (UINT64 l, UINT32 digits, CHAR padding)
std::string StringDecSigned (INT64 l, UINT32 digits, CHAR padding)
std::string StringBignum (INT64 l, UINT32 digits, CHAR padding)
std::string Reformat (const std::string &s, const std::string &prefix, UINT32 min_line, UINT32 max_line)
std::string StringHex32 (UINT32 l, UINT32 digits, BOOL prefix_0x)
std::string StringFlt (FLT64 val, UINT32 precision, UINT32 width)
std::string StringBool (BOOL b)
std::string StringTri (TRI t)
INT32 Int32FromString (const std::string &s)
UINT32 Uint32FromString (const std::string &s)
INT64 Int64FromString (const std::string &s)
UINT64 Uint64FromString (const std::string &s)
FLT64 FLT64FromString (const std::string &s)
INT CharToHexDigit (CHAR c)
ADDRINT AddrintFromString (const std::string &str)
std::string ReadLine (std::istream &inputFile, UINT32 *lineNum)
UINT32 Tokenize (const std::string &line, std::string *array, UINT32 n)
std::string StringHex (UINT32 l, UINT32 digits, BOOL prefix_0x=TRUE)
std::string decstr (INT64 val, UINT32 width=0)
std::string decstr (INT32 val, UINT32 width=0)
std::string decstr (INT16 val, UINT32 width=0)
std::string decstr (UINT64 val, UINT32 width=0)
std::string decstr (UINT32 val, UINT32 width=0)
std::string decstr (UINT16 val, UINT32 width=0)
std::string hexstr (INT64 val, UINT32 width=0)
std::string hexstr (INT32 val, UINT32 width=0)
std::string hexstr (INT16 val, UINT32 width=0)
std::string hexstr (UINT64 val, UINT32 width=0)
std::string hexstr (VOID *p, UINT32 width=0)
std::string hexstr (const VOID *p, UINT32 width=0)
std::string hexstr (UINT32 val, UINT32 width=0)
std::string hexstr (UINT16 val, UINT32 width=0)
std::string fltstr (FLT64 val, UINT32 prec=0, UINT32 width=0)
std::string ljstr (const std::string &s, UINT32 width, CHAR padding= ' ')
template<typename ITER , typename CONV >
GLOBALTEMPLATEFUN std::string StringSequence (ITER begin, ITER end, const CONV &conv, const std::string &delimiter=std::string(" "))
LOCALVAR KNOB< BOOL > KnobAllowAvxSupport (KNOB_MODE_WRITEONCE,"supported","allow_AVX_support","1","allow AVX support")
LOCALVAR KNOB< BOOL > KnobAllowAvx512Support (KNOB_MODE_WRITEONCE,"supported","allow_AVX512_support","1","Allow using AVX-512 instructions")
BOOL REG_is_reg (REG reg)
BOOL REG_is_pseudo (REG reg)
BOOL REG_is_gr (REG reg)
BOOL REG_is_fr (REG reg)
BOOL REG_is_br (REG reg)
BOOL REG_is_gr64 (REG reg)
BOOL REG_is_gr32 (REG reg)
BOOL REG_is_pin_gr32 (REG reg)
BOOL REG_is_gr16 (REG reg)
BOOL REG_is_gr8 (REG reg)
BOOL REG_is_seg (REG reg)
BOOL REG_is_fr_for_get_context (REG reg)
BOOL REG_is_fr_or_x87 (REG reg)
BOOL REG_is_mxcsr (REG reg)
BOOL REG_is_any_mxcsr (REG reg)
BOOL REG_is_any_x87 (REG reg)
REG REG_st_return_reg ()
BOOL REG_is_mm (REG reg)
BOOL REG_is_xmm (REG reg)
BOOL REG_is_ymm (REG reg)
BOOL REG_is_zmm (REG reg)
BOOL REG_is_xmm_ymm_zmm (REG reg)
BOOL REG_is_any_vector_reg (REG reg)
BOOL REG_is_k_mask (REG reg)
BOOL REG_is_any_mask (REG reg)
REG REG_corresponding_ymm_reg (REG reg)
REG REG_corresponding_zmm_reg (REG reg)
REG REG_corresponding_zmm_from_ymm (REG reg)
BOOL REG_is_dr (REG reg)
BOOL REG_is_cr (REG reg)
BOOL REG_is_tr (REG reg)
BOOL REG_is_st (REG reg)
BOOL REG_is_in_X87 (REG reg)
BOOL REG_is_machine (REG reg)
BOOL REG_is_application (REG reg)
BOOL REG_is_pin (REG reg)
BOOL REG_is_subclass_none (REG reg)
BOOL REG_is_pin_gpr (REG reg)
BOOL REG_is_seg_base (REG reg)
BOOL REG_is_gs_or_fs (REG reg)
BOOL REG_valid_for_iarg_reg_value (REG reg)
BOOL REG_is_pin_gr (REG reg)
BOOL REG_is_pin_gr_half32 (REG reg)
BOOL REG_is_pin_xmm (REG reg)
BOOL REG_is_pin_ymm (REG reg)
BOOL REG_is_pin_zmm (REG reg)
BOOL REG_is_pin_xmm_ymm_zmm (REG reg)
BOOL REG_is_pin_k_mask (REG reg)
BOOL REG_is_avx512_hi16_xmm (const REG xmm)
BOOL REG_is_avx512_hi16_ymm (const REG ymm)
BOOL REG_is_gr_type (REG reg)
REG REG_AppFlags ()
BOOL REG_is_flags (REG reg)
BOOL REG_is_pin_flags (REG reg)
BOOL REG_is_status_flags (REG reg)
BOOL REG_is_pin_status_flags (REG reg)
BOOL REG_is_df_flag (REG reg)
BOOL REG_is_pin_df_flag (REG reg)
BOOL REG_is_flags_type (REG reg)
BOOL REG_is_flags_any_size_type (REG reg)
BOOL REG_is_status_flags_type (REG reg)
BOOL REG_is_app_status_flags_type (REG reg)
BOOL REG_is_df_flag_type (REG reg)
BOOL REG_is_app_df_flag_type (REG reg)
BOOL REG_is_any_flags_type (REG reg)
BOOL REG_is_any_pin_flags (REG reg)
BOOL REG_is_any_app_flags (REG reg)
REG REG_get_status_flags_reg_of_type (REG reg)
REG REG_get_df_flag_reg_of_type (REG reg)
REG REG_get_full_flags_reg_of_type (REG reg)
BOOL REG_is_stackptr_type (REG reg)
BOOL REG_is_representative_reg (REG reg)
BOOL REG_is_x87_reg (REG reg)
BOOL REG_is_pin_inst (REG reg)
BOOL REG_is_buffer (REG reg)
BOOL REG_is_inst_scratch (REG reg)
ADDRINT REG_regSubClassBitMapTable ()
ADDRINT REG_regDefTable ()
BOOL REG_is_pin_tmp (REG reg)
REG REG_INVALID ()
BOOL REG_valid (REG reg)
REG REG_MachineToPin (const REG reg)
BOOL REG_is_pin64 (REG reg)
REG REG_LastSupportedXmm ()
REG REG_LastSupportedYmm ()
REG REG_LastSupportedZmm ()
UINT32 REG_Size (REG reg)
REG REG_FullRegName (const REG reg)
std::string REG_StringShort (REG reg)
REG REG_IdentityCopy (const REG reg)
REG REG_SpillPtr ()
BOOL REG_is_Half16 (const REG reg)
REGWIDTH REG_Width (REG reg)
BOOL REG_is_Half32 (const REG reg)
BOOL REG_is_Lower8 (const REG reg)
BOOL REG_is_Upper8 (const REG reg)
BOOL REG_is_Any8 (const REG reg)
REG REG_Half16 (const REG reg, const BOOL must_success)
BOOL REG_is_partialreg (const REG reg)

Variables

LOCALCONST INT32 MEMORY_CHUNK_ALLOCATION_SIZE = GetMemoryAllocationGranularity()
GLOBALCONST UINT32 MAX_WINDOWS_EXCEPTION_ARGS = 5
KNOB< BOOL > KnobSlowAsserts (KNOB_MODE_WRITEONCE,"user&pintool","slow_asserts","0","Perform expensive sanity checks")
LOCALVAR PIN_STATUS PinStatus = {PIN_LOAD_STATUS_INJECTOR, PIN_LOAD_STATUS_INJECTOR}
GLOBALCONST TLS_KEY INVALID_TLS_KEY = (-1)
LOCALVAR const CHAR HexTab [] = "0123456789abcdef"
GLOBALCONST ADDRINT AC_FLAG_BIT = 0x40000
const REGDEF_ENTRY _regDefTable []
GLOBALCONST REG_CLASS_BITS REGCBIT_APP_FLAGS
GLOBALCONST REG_CLASS_BITS REGCBIT_PIN_FLAGS
GLOBALCONST REG_CLASS_BITS REGCBIT_PARTIAL
GLOBALCONST REG_SUBCLASS_BITS REGSBIT_PIN_INST_ALL
GLOBALCONST REG_SUBCLASS_BITS REGSBIT_PIN_SCRATCH_ALL
GLOBALCONST REG_SUBCLASS_BITS REGSBIT_STACKPTR_ALL
GLOBALCONST UINT32 PIN_INFINITE_TIMEOUT = static_cast<UINT32>(-1)
GLOBALCONST UINT32 PIN_MAX_THREADS = 2048

Detailed Description

This file defines an object which collects statistics about the various ATOMIC objects.

This module contains routines and classes for the memory management of large arrays When changing this code, keep in mind that is supposed to work in both 32bit and 64bit environments!

TODO: when reserving a new memory chunk we could probe whether the area is available

child process definitions

A lock that is more full-featured than a "simple" lock. This lock uses a loop over yield to wait on the lock. The Linux implementation uses FUTEX and is implemented in futexlock.cpp.

A specific lock implementation that is more full-featured than a "simple" lock.

This module contains routines and classes for the handling error messages. This module differs from message.cpp by being included only in the VM, not the client.

Basic definitions pertaining to hardware and software exceptions.

Contains declarations of types related to the fp state on ia-32

Contains declarations of types related to the fp state on Intel64

This module contains routines and classes for the processing of command line arguments.

Definitions of knobs which are part of pin's command line (rather than the tool's command line). This file is located in level base in order to allow the launcher (i.e. pin.exe) to define the same set of knobs

This file contains lock primitives

This module contains routines and classes for the handling error messages

Parsing utilities of pin's command line

This file contains REG primitives

Templates of singleton classes

This module contains useful utility functions.

This file contains general unicode utilities

This file contains the implementation of a simple XML parser.

This file contains basic abstractions for IA32

Interface for querying the ia32/intel64 CPU features


Function Documentation

REG LEVEL_BASE::REG_Half16 ( const REG  reg,
const BOOL  must_success 
)

Return the lower 16-bit version of reg

BOOL LEVEL_BASE::REG_is_in_X87 ( REG  reg)
Returns:
true if reg is ST0-7, MM0-7(MMX) or ST control/status register
REG LEVEL_BASE::REG_SpillPtr ( )

The physical register assigned to hold the spill pointer

template<typename ITER , typename CONV >
GLOBALTEMPLATEFUN std::string LEVEL_BASE::StringSequence ( ITER  begin,
ITER  end,
const CONV &  conv,
const std::string &  delimiter = std::string(" ") 
)

Convert the sequence [begin, end) to string. Use the <conv> object to convert the elements. Separate the elements by <delimiter>.


Variable Documentation

GLOBALCONST ADDRINT LEVEL_BASE::AC_FLAG_BIT = 0x40000
KNOB<BOOL> LEVEL_BASE::KnobSlowAsserts(KNOB_MODE_WRITEONCE,"user&pintool","slow_asserts","0","Perform expensive sanity checks")

Knob for deciding whether using expensive sanity checks.

GLOBALCONST UINT32 LEVEL_BASE::PIN_INFINITE_TIMEOUT = static_cast<UINT32>(-1)

Timeout interval that never elapses.

GLOBALCONST UINT32 LEVEL_BASE::PIN_MAX_THREADS = 2048

Maximum number of threads supported by PIN.

 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator