CCTLib
Calling-context and data-object attribution library for Intel Pin
redspy_temporal_client.cpp File Reference
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <malloc.h>
#include <iostream>
#include <unistd.h>
#include <assert.h>
#include <string.h>
#include <sys/mman.h>
#include <sstream>
#include <functional>
#include <unordered_set>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <list>
#include "pin.H"
#include "pin_isa_compat.H"
#include "cctlib.H"
#include "shadow_memory.H"
#include <xmmintrin.h>
#include <immintrin.h>
#include "xed-interface.h"
#include "xed-common-hdrs.h"
#include <google/sparse_hash_map>
#include <google/dense_hash_map>
+ Include dependency graph for redspy_temporal_client.cpp:

Go to the source code of this file.

Classes

struct  AddrValPair
 
struct  LargeReg
 
struct  RedSpyThreadData
 
struct  HandleAliasRegisters< T, aliasGroup >
 
struct  HandleGeneralRegisters< T, len >
 
struct  HandleSpecialRegisters< lenInt64 >
 
struct  ApproxGeneralRegisters< T, isAlias >
 
struct  ApproxLargeRegisters< T, simdType >
 
struct  UnrolledLoop< start, end, incr >
 
struct  UnrolledLoop< end, end, incr, conditional, approx >
 
struct  UnrolledConjunction< start, end, incr >
 
struct  UnrolledConjunction< end, end, incr >
 
struct  RedSpyAnalysis< AccessLen, bufferOffset >
 
struct  RedSpyInstrument< readBufferSlotIndex >
 
struct  RedundacyData
 

Macros

#define READ_ACTION   (0)
 
#define WRITE_ACTION   (0xff)
 
#define ONE_BYTE_READ_ACTION   (0)
 
#define TWO_BYTE_READ_ACTION   (0)
 
#define FOUR_BYTE_READ_ACTION   (0)
 
#define EIGHT_BYTE_READ_ACTION   (0)
 
#define ONE_BYTE_WRITE_ACTION   (0xff)
 
#define TWO_BYTE_WRITE_ACTION   (0xffff)
 
#define FOUR_BYTE_WRITE_ACTION   (0xffffffff)
 
#define EIGHT_BYTE_WRITE_ACTION   (0xffffffffffffffff)
 
#define IS_ACCESS_WITHIN_PAGE_BOUNDARY(accessAddr, accessLen)   (PAGE_OFFSET((accessAddr)) <= (PAGE_OFFSET_MASK - (accessLen)))
 
#define MAX_REDUNDANT_CONTEXTS_TO_LOG   (1000)
 
#define THREAD_MAX   (1024)
 
#define ENCODE_ADDRESS_AND_ACCESS_LEN(addr, len)   ((addr) | (((uint64_t)(len)) << 48))
 
#define DECODE_ADDRESS(addrAndLen)   ((addrAndLen) & ((1L << 48) - 1))
 
#define DECODE_ACCESS_LEN(addrAndLen)   ((addrAndLen) >> 48)
 
#define MAX_WRITE_OP_LENGTH   (512)
 
#define MAX_WRITE_OPS_IN_INS   (8)
 
#define MAX_REG_LENGTH   (64)
 
#define MAX_SIMD_LENGTH   (64)
 
#define MAX_SIMD_REGS   (32)
 
#define MAX_ALIAS_REGS   (16)
 
#define MAX_ALIAS_REG_SIZE   (8)
 
#define MAX_ALIAS_TYPE   (3)
 
#define ALIAS_BYTES_INDEX_64   (0)
 
#define ALIAS_BYTES_INDEX_32   (0)
 
#define ALIAS_BYTES_INDEX_16   (0)
 
#define ALIAS_BYTES_INDEX_8_L   (0)
 
#define ALIAS_BYTES_INDEX_8_H   (1)
 
#define DECODE_DEAD(data)   static_cast<ContextHandle_t>(((data)&0xffffffffffffffff) >> 32)
 
#define DECODE_KILL(data)   (static_cast<ContextHandle_t>((data)&0x00000000ffffffff))
 
#define MAKE_CONTEXT_PAIR(a, b)   (((uint64_t)(a) << 32) | ((uint64_t)(b)))
 
#define delta   0.01
 
#define HANDLE_SPECIALREG(LEN, REG_ID)    INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)HandleSpecialRegisters<LEN>::CheckRegValues, IARG_REG_CONST_REFERENCE, reg, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
 
#define HANDLE_LARGEREG_APPROX(T, SIMD_TYPE, REG_ID)    INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)ApproxLargeRegisters<T, SIMD_TYPE>::CheckValues, IARG_REG_CONST_REFERENCE, reg, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
 
#define HANDLE_ALIAS_REG(T, ALIAS_GRP, ID)    INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)HandleAliasRegisters<T, ALIAS_GRP>::CheckUpdateGenericAlias, IARG_UINT32, ID, IARG_REG_VALUE, reg, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
 
#define HANDLE_GENERAL(T)    INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)HandleGeneralRegisters<T, 1>::CheckValues, IARG_REG_VALUE, reg, IARG_UINT32, reg, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
 
#define HANDLE_APPROXREG(T, IS_ALIAS, REG_ID)    INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)ApproxGeneralRegisters<T, IS_ALIAS>::CheckValues, IARG_REG_CONST_REFERENCE, reg, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
 
#define HANDLE_10BYTES_APPROX(REG_ID)    INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)Check10BytesReg, IARG_CONTEXT, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
 
#define HANDLE_CASE(T, ACCESS_LEN, BUFFER_INDEX, IS_APPROX)
 
#define HANDLE_APPROX_CASE(T, ACCESS_LEN, BUFFER_INDEX, IS_APPROX)
 
#define HANDLE_LARGE()
 

Enumerations

enum  AliasReg {
  ALIAS_REG_A = 0 , ALIAS_REG_B , ALIAS_REG_C , ALIAS_REG_D ,
  ALIAS_REG_BP , ALIAS_REG_DI , ALIAS_REG_SI , ALIAS_REG_SP ,
  ALIAS_REG_R8 , ALIAS_REG_R9 , ALIAS_REG_R10 , ALIAS_REG_R11 ,
  ALIAS_REG_R12 , ALIAS_REG_R13 , ALIAS_REG_R14 , ALIAS_REG_R15
}
 
enum  AliasGroup { ALIAS_GENERIC = 0 , ALIAS_HIGH_BYTE , ALIAS_LOW_BYTE }
 

Functions

struct AddrValPair __attribute__ ((aligned(16)))
 
struct LargeReg __attribute__ ((aligned(32)))
 
RedSpyThreadDataClientGetTLS (const THREADID threadId)
 
static INT32 Usage ()
 
static void ClientInit (int argc, char *argv[])
 
static void AddToRedTable (uint64_t key, uint16_t value, THREADID threadId) __attribute__((always_inline
 
static void AddToApproximateRedTable (uint64_t key, uint16_t value, THREADID threadId) __attribute__((always_inline
 
static bool IsFloatInstruction (ADDRINT ip)
 
static bool IsFloatInstructionOld (ADDRINT ip)
 
static uint16_t FloatOperandSize (ADDRINT ip, uint32_t oper)
 
static void Check10BytesReg (CONTEXT *ctxt, REG reg, uint32_t opaqueHandle, THREADID threadId)
 
static uint32_t GetAliasIDs (REG reg)
 
bool RegHasAlias (REG reg)
 
static void InstrumentAliasReg (INS ins, REG reg, uint16_t oper, uint32_t opaqueHandle)
 
static void InstrumentGeneralReg (INS ins, REG reg, uint16_t oper, uint32_t opaqueHandle)
 
static VOID RecordValueBeforeLargeWrite (void *addr, UINT32 accessLen, uint32_t bufferOffset, THREADID threadId)
 
static VOID CheckAfterLargeWrite (UINT32 accessLen, uint32_t bufferOffset, uint32_t opaqueHandle, THREADID threadId)
 
static int GetNumWriteOperandsInIns (INS ins, UINT32 &whichOp)
 
static bool INS_IsIgnorable (INS ins)
 
static bool REG_IsIgnorable (REG reg)
 
static VOID InstrumentInsCallback (INS ins, VOID *v, const uint32_t opaqueHandle)
 
VOID Update (uint32_t bytes, THREADID threadId)
 
static void InstrumentTrace (TRACE trace, void *f)
 
static bool RedundacyCompare (const struct RedundacyData &first, const struct RedundacyData &second)
 
static void PrintRedundancyPairs (THREADID threadId)
 
static void PrintApproximationRedundancyPairs (THREADID threadId)
 
static VOID ImageUnload (IMG img, VOID *v)
 
static VOID ThreadFiniFunc (THREADID threadid, const CONTEXT *ctxt, INT32 code, VOID *v)
 
static VOID FiniFunc (INT32 code, VOID *v)
 
static void InitThreadData (RedSpyThreadData *tdata)
 
static VOID ThreadStart (THREADID threadid, CONTEXT *ctxt, INT32 flags, VOID *v)
 
int main (int argc, char *argv[])
 

Variables

uint8_t value [MAX_WRITE_OP_LENGTH]
 
void * address
 
struct RedSpyThreadData __attribute__
 
static TLS_KEY client_tls_key
 
static RedSpyThreadDatagSingleThreadedTData
 
static FILE * gTraceFile
 
static ConcurrentShadowMemory< ContextHandle_tsm
 
struct {
   char   dummy1 [128]
 
   xed_state_t   xedState
 
   char   dummy2 [128]
 
RedSpyGlobals
 
static const uint64_t READ_ACCESS_STATES [] = { 0, ONE_BYTE_READ_ACTION, TWO_BYTE_READ_ACTION, 0, FOUR_BYTE_READ_ACTION, 0, 0, 0, EIGHT_BYTE_READ_ACTION}
 
static const uint64_t WRITE_ACCESS_STATES [] = { 0, ONE_BYTE_WRITE_ACTION, TWO_BYTE_WRITE_ACTION, 0, FOUR_BYTE_WRITE_ACTION, 0, 0, 0, EIGHT_BYTE_WRITE_ACTION}
 
static const uint8_t OVERFLOW_CHECK [] = { 0, 0, 0, 1, 2, 3, 4, 5, 6}
 
static dense_hash_map< uint64_t, uint64_t > RedMap [THREAD_MAX]
 
static dense_hash_map< uint64_t, uint64_t > ApproxRedMap [THREAD_MAX]
 
static void flatten
 

Macro Definition Documentation

◆ ALIAS_BYTES_INDEX_16

#define ALIAS_BYTES_INDEX_16   (0)

Definition at line 111 of file redspy_temporal_client.cpp.

◆ ALIAS_BYTES_INDEX_32

#define ALIAS_BYTES_INDEX_32   (0)

Definition at line 110 of file redspy_temporal_client.cpp.

◆ ALIAS_BYTES_INDEX_64

#define ALIAS_BYTES_INDEX_64   (0)

Definition at line 109 of file redspy_temporal_client.cpp.

◆ ALIAS_BYTES_INDEX_8_H

#define ALIAS_BYTES_INDEX_8_H   (1)

Definition at line 113 of file redspy_temporal_client.cpp.

◆ ALIAS_BYTES_INDEX_8_L

#define ALIAS_BYTES_INDEX_8_L   (0)

Definition at line 112 of file redspy_temporal_client.cpp.

◆ DECODE_ACCESS_LEN

#define DECODE_ACCESS_LEN (   addrAndLen)    ((addrAndLen) >> 48)

Definition at line 65 of file redspy_temporal_client.cpp.

◆ DECODE_ADDRESS

#define DECODE_ADDRESS (   addrAndLen)    ((addrAndLen) & ((1L << 48) - 1))

Definition at line 64 of file redspy_temporal_client.cpp.

◆ DECODE_DEAD

#define DECODE_DEAD (   data)    static_cast<ContextHandle_t>(((data)&0xffffffffffffffff) >> 32)

Definition at line 137 of file redspy_temporal_client.cpp.

◆ DECODE_KILL

#define DECODE_KILL (   data)    (static_cast<ContextHandle_t>((data)&0x00000000ffffffff))

Definition at line 138 of file redspy_temporal_client.cpp.

◆ delta

#define delta   0.01

Definition at line 143 of file redspy_temporal_client.cpp.

◆ EIGHT_BYTE_READ_ACTION

#define EIGHT_BYTE_READ_ACTION   (0)

Definition at line 49 of file redspy_temporal_client.cpp.

◆ EIGHT_BYTE_WRITE_ACTION

#define EIGHT_BYTE_WRITE_ACTION   (0xffffffffffffffff)

Definition at line 54 of file redspy_temporal_client.cpp.

◆ ENCODE_ADDRESS_AND_ACCESS_LEN

#define ENCODE_ADDRESS_AND_ACCESS_LEN (   addr,
  len 
)    ((addr) | (((uint64_t)(len)) << 48))

Definition at line 63 of file redspy_temporal_client.cpp.

◆ FOUR_BYTE_READ_ACTION

#define FOUR_BYTE_READ_ACTION   (0)

Definition at line 48 of file redspy_temporal_client.cpp.

◆ FOUR_BYTE_WRITE_ACTION

#define FOUR_BYTE_WRITE_ACTION   (0xffffffff)

Definition at line 53 of file redspy_temporal_client.cpp.

◆ HANDLE_10BYTES_APPROX

#define HANDLE_10BYTES_APPROX (   REG_ID)     INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)Check10BytesReg, IARG_CONTEXT, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)

Definition at line 1447 of file redspy_temporal_client.cpp.

◆ HANDLE_ALIAS_REG

#define HANDLE_ALIAS_REG (   T,
  ALIAS_GRP,
  ID 
)     INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)HandleAliasRegisters<T, ALIAS_GRP>::CheckUpdateGenericAlias, IARG_UINT32, ID, IARG_REG_VALUE, reg, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)

Definition at line 1438 of file redspy_temporal_client.cpp.

◆ HANDLE_APPROX_CASE

#define HANDLE_APPROX_CASE (   T,
  ACCESS_LEN,
  BUFFER_INDEX,
  IS_APPROX 
)
Value:
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)RedSpyAnalysis<T, (ACCESS_LEN), (BUFFER_INDEX), (IS_APPROX)>::RecordNByteValueBeforeWrite, IARG_MEMORYOP_EA, memOp, IARG_THREAD_ID, IARG_END); \
INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)RedSpyAnalysis<T, (ACCESS_LEN), (BUFFER_INDEX), (IS_APPROX)>::ApproxCheckAfterWrite, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_INST_PTR, IARG_END)

Definition at line 1961 of file redspy_temporal_client.cpp.

◆ HANDLE_APPROXREG

#define HANDLE_APPROXREG (   T,
  IS_ALIAS,
  REG_ID 
)     INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)ApproxGeneralRegisters<T, IS_ALIAS>::CheckValues, IARG_REG_CONST_REFERENCE, reg, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)

Definition at line 1444 of file redspy_temporal_client.cpp.

◆ HANDLE_CASE

#define HANDLE_CASE (   T,
  ACCESS_LEN,
  BUFFER_INDEX,
  IS_APPROX 
)
Value:
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)RedSpyAnalysis<T, (ACCESS_LEN), (BUFFER_INDEX), (IS_APPROX)>::RecordNByteValueBeforeWrite, IARG_MEMORYOP_EA, memOp, IARG_THREAD_ID, IARG_END); \
INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)RedSpyAnalysis<T, (ACCESS_LEN), (BUFFER_INDEX), (IS_APPROX)>::CheckNByteValueAfterWrite, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_INST_PTR, IARG_END)

Definition at line 1957 of file redspy_temporal_client.cpp.

◆ HANDLE_GENERAL

#define HANDLE_GENERAL (   T)     INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)HandleGeneralRegisters<T, 1>::CheckValues, IARG_REG_VALUE, reg, IARG_UINT32, reg, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)

Definition at line 1441 of file redspy_temporal_client.cpp.

◆ HANDLE_LARGE

#define HANDLE_LARGE ( )
Value:
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR)RecordValueBeforeLargeWrite, IARG_MEMORYOP_EA, memOp, IARG_MEMORYWRITE_SIZE, IARG_UINT32, readBufferSlotIndex, IARG_THREAD_ID, IARG_END); \
INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)CheckAfterLargeWrite, IARG_MEMORYREAD_SIZE, IARG_UINT32, readBufferSlotIndex, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)
static VOID RecordValueBeforeLargeWrite(void *addr, UINT32 accessLen, uint32_t bufferOffset, THREADID threadId)
static VOID CheckAfterLargeWrite(UINT32 accessLen, uint32_t bufferOffset, uint32_t opaqueHandle, THREADID threadId)

Definition at line 1965 of file redspy_temporal_client.cpp.

◆ HANDLE_LARGEREG_APPROX

#define HANDLE_LARGEREG_APPROX (   T,
  SIMD_TYPE,
  REG_ID 
)     INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)ApproxLargeRegisters<T, SIMD_TYPE>::CheckValues, IARG_REG_CONST_REFERENCE, reg, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)

Definition at line 1435 of file redspy_temporal_client.cpp.

◆ HANDLE_SPECIALREG

#define HANDLE_SPECIALREG (   LEN,
  REG_ID 
)     INS_InsertPredicatedCall(ins, IPOINT_AFTER, (AFUNPTR)HandleSpecialRegisters<LEN>::CheckRegValues, IARG_REG_CONST_REFERENCE, reg, IARG_UINT32, REG_ID, IARG_UINT32, opaqueHandle, IARG_THREAD_ID, IARG_END)

Definition at line 1432 of file redspy_temporal_client.cpp.

◆ IS_ACCESS_WITHIN_PAGE_BOUNDARY

#define IS_ACCESS_WITHIN_PAGE_BOUNDARY (   accessAddr,
  accessLen 
)    (PAGE_OFFSET((accessAddr)) <= (PAGE_OFFSET_MASK - (accessLen)))

Definition at line 57 of file redspy_temporal_client.cpp.

◆ MAKE_CONTEXT_PAIR

#define MAKE_CONTEXT_PAIR (   a,
 
)    (((uint64_t)(a) << 32) | ((uint64_t)(b)))

Definition at line 141 of file redspy_temporal_client.cpp.

◆ MAX_ALIAS_REG_SIZE

#define MAX_ALIAS_REG_SIZE   (8)

Definition at line 76 of file redspy_temporal_client.cpp.

◆ MAX_ALIAS_REGS

#define MAX_ALIAS_REGS   (16)

Definition at line 75 of file redspy_temporal_client.cpp.

◆ MAX_ALIAS_TYPE

#define MAX_ALIAS_TYPE   (3)

Definition at line 77 of file redspy_temporal_client.cpp.

◆ MAX_REDUNDANT_CONTEXTS_TO_LOG

#define MAX_REDUNDANT_CONTEXTS_TO_LOG   (1000)

Definition at line 60 of file redspy_temporal_client.cpp.

◆ MAX_REG_LENGTH

#define MAX_REG_LENGTH   (64)

Definition at line 70 of file redspy_temporal_client.cpp.

◆ MAX_SIMD_LENGTH

#define MAX_SIMD_LENGTH   (64)

Definition at line 72 of file redspy_temporal_client.cpp.

◆ MAX_SIMD_REGS

#define MAX_SIMD_REGS   (32)

Definition at line 73 of file redspy_temporal_client.cpp.

◆ MAX_WRITE_OP_LENGTH

#define MAX_WRITE_OP_LENGTH   (512)

Definition at line 68 of file redspy_temporal_client.cpp.

◆ MAX_WRITE_OPS_IN_INS

#define MAX_WRITE_OPS_IN_INS   (8)

Definition at line 69 of file redspy_temporal_client.cpp.

◆ ONE_BYTE_READ_ACTION

#define ONE_BYTE_READ_ACTION   (0)

Definition at line 46 of file redspy_temporal_client.cpp.

◆ ONE_BYTE_WRITE_ACTION

#define ONE_BYTE_WRITE_ACTION   (0xff)

Definition at line 51 of file redspy_temporal_client.cpp.

◆ READ_ACTION

#define READ_ACTION   (0)

Definition at line 43 of file redspy_temporal_client.cpp.

◆ THREAD_MAX

#define THREAD_MAX   (1024)

Definition at line 61 of file redspy_temporal_client.cpp.

◆ TWO_BYTE_READ_ACTION

#define TWO_BYTE_READ_ACTION   (0)

Definition at line 47 of file redspy_temporal_client.cpp.

◆ TWO_BYTE_WRITE_ACTION

#define TWO_BYTE_WRITE_ACTION   (0xffff)

Definition at line 52 of file redspy_temporal_client.cpp.

◆ WRITE_ACTION

#define WRITE_ACTION   (0xff)

Definition at line 44 of file redspy_temporal_client.cpp.

Enumeration Type Documentation

◆ AliasGroup

enum AliasGroup
Enumerator
ALIAS_GENERIC 
ALIAS_HIGH_BYTE 
ALIAS_LOW_BYTE 

Definition at line 101 of file redspy_temporal_client.cpp.

◆ AliasReg

enum AliasReg
Enumerator
ALIAS_REG_A 
ALIAS_REG_B 
ALIAS_REG_C 
ALIAS_REG_D 
ALIAS_REG_BP 
ALIAS_REG_DI 
ALIAS_REG_SI 
ALIAS_REG_SP 
ALIAS_REG_R8 
ALIAS_REG_R9 
ALIAS_REG_R10 
ALIAS_REG_R11 
ALIAS_REG_R12 
ALIAS_REG_R13 
ALIAS_REG_R14 
ALIAS_REG_R15 

Definition at line 80 of file redspy_temporal_client.cpp.

Function Documentation

◆ __attribute__() [1/2]

struct AddrValPair __attribute__ ( (aligned(16))  )

◆ __attribute__() [2/2]

struct LargeReg __attribute__ ( (aligned(32))  )

◆ AddToApproximateRedTable()

static void AddToApproximateRedTable ( uint64_t  key,
uint16_t  value,
THREADID  threadId 
)
inlinestatic

◆ AddToRedTable()

static void AddToRedTable ( uint64_t  key,
uint16_t  value,
THREADID  threadId 
)
inlinestatic

◆ Check10BytesReg()

static void Check10BytesReg ( CONTEXT *  ctxt,
REG  reg,
uint32_t  opaqueHandle,
THREADID  threadId 
)
static

◆ CheckAfterLargeWrite()

static VOID CheckAfterLargeWrite ( UINT32  accessLen,
uint32_t  bufferOffset,
uint32_t  opaqueHandle,
THREADID  threadId 
)
inlinestatic

◆ ClientGetTLS()

◆ ClientInit()

static void ClientInit ( int  argc,
char *  argv[] 
)
static

Definition at line 203 of file redspy_temporal_client.cpp.

References gTraceFile, MAX_FILE_PATH, and RedSpyGlobals.

Referenced by main().

◆ FiniFunc()

static VOID FiniFunc ( INT32  code,
VOID *  v 
)
static

Definition at line 2449 of file redspy_temporal_client.cpp.

Referenced by main().

◆ FloatOperandSize()

static uint16_t FloatOperandSize ( ADDRINT  ip,
uint32_t  oper 
)
inlinestatic

◆ GetAliasIDs()

◆ GetNumWriteOperandsInIns()

static int GetNumWriteOperandsInIns ( INS  ins,
UINT32 &  whichOp 
)
static

Definition at line 1972 of file redspy_temporal_client.cpp.

Referenced by InstrumentInsCallback().

◆ ImageUnload()

static VOID ImageUnload ( IMG  img,
VOID *  v 
)
static

◆ InitThreadData()

◆ INS_IsIgnorable()

static bool INS_IsIgnorable ( INS  ins)
inlinestatic

Definition at line 2059 of file redspy_temporal_client.cpp.

References INS_IsMaskedJump().

Referenced by InstrumentInsCallback(), and InstrumentTrace().

◆ InstrumentAliasReg()

static void InstrumentAliasReg ( INS  ins,
REG  reg,
uint16_t  oper,
uint32_t  opaqueHandle 
)
inlinestatic

◆ InstrumentGeneralReg()

static void InstrumentGeneralReg ( INS  ins,
REG  reg,
uint16_t  oper,
uint32_t  opaqueHandle 
)
inlinestatic

◆ InstrumentInsCallback()

static VOID InstrumentInsCallback ( INS  ins,
VOID *  v,
const uint32_t  opaqueHandle 
)
static

◆ InstrumentTrace()

static void InstrumentTrace ( TRACE  trace,
void *  f 
)
static

Definition at line 2254 of file redspy_temporal_client.cpp.

References INS_IsIgnorable(), INS_MemoryWriteSize(), REG_IsIgnorable(), and Update().

Referenced by main().

◆ IsFloatInstruction()

static bool IsFloatInstruction ( ADDRINT  ip)
inlinestatic

Definition at line 289 of file redspy_temporal_client.cpp.

References ip, and RedSpyGlobals.

Referenced by InstrumentAliasReg(), and InstrumentGeneralReg().

◆ IsFloatInstructionOld()

static bool IsFloatInstructionOld ( ADDRINT  ip)
inlinestatic

Definition at line 354 of file redspy_temporal_client.cpp.

References ip, and RedSpyGlobals.

◆ main()

◆ PrintApproximationRedundancyPairs()

◆ PrintRedundancyPairs()

◆ RecordValueBeforeLargeWrite()

static VOID RecordValueBeforeLargeWrite ( void *  addr,
UINT32  accessLen,
uint32_t  bufferOffset,
THREADID  threadId 
)
inlinestatic

◆ RedundacyCompare()

static bool RedundacyCompare ( const struct RedundacyData first,
const struct RedundacyData second 
)
inlinestatic

◆ REG_IsIgnorable()

static bool REG_IsIgnorable ( REG  reg)
inlinestatic

Definition at line 2081 of file redspy_temporal_client.cpp.

Referenced by InstrumentInsCallback(), and InstrumentTrace().

◆ RegHasAlias()

bool RegHasAlias ( REG  reg)
inline

Definition at line 1328 of file redspy_temporal_client.cpp.

Referenced by InstrumentInsCallback().

◆ ThreadFiniFunc()

static VOID ThreadFiniFunc ( THREADID  threadid,
const CONTEXT *  ctxt,
INT32  code,
VOID *  v 
)
static

Definition at line 2446 of file redspy_temporal_client.cpp.

Referenced by main().

◆ ThreadStart()

static VOID ThreadStart ( THREADID  threadid,
CONTEXT *  ctxt,
INT32  flags,
VOID *  v 
)
static

Definition at line 2464 of file redspy_temporal_client.cpp.

References client_tls_key, gSingleThreadedTData, and InitThreadData().

Referenced by main().

◆ Update()

VOID Update ( uint32_t  bytes,
THREADID  threadId 
)
inline

Definition at line 2248 of file redspy_temporal_client.cpp.

References RedSpyThreadData::bytesWritten, and ClientGetTLS().

Referenced by InstrumentTrace().

◆ Usage()

static INT32 Usage ( )
static

Definition at line 187 of file redspy_temporal_client.cpp.

Referenced by main().

Variable Documentation

◆ __attribute__

◆ address

◆ ApproxRedMap

dense_hash_map<uint64_t, uint64_t> ApproxRedMap[THREAD_MAX]
static

◆ client_tls_key

TLS_KEY client_tls_key
static

Definition at line 173 of file redspy_temporal_client.cpp.

Referenced by ClientGetTLS(), main(), and ThreadStart().

◆ dummy1

char dummy1[128]

Definition at line 197 of file redspy_temporal_client.cpp.

◆ dummy2

char dummy2[128]

Definition at line 199 of file redspy_temporal_client.cpp.

◆ flatten

void flatten

Definition at line 240 of file redspy_temporal_client.cpp.

◆ gSingleThreadedTData

RedSpyThreadData* gSingleThreadedTData
static

Definition at line 174 of file redspy_temporal_client.cpp.

Referenced by ClientGetTLS(), and ThreadStart().

◆ gTraceFile

FILE* gTraceFile
static

◆ OVERFLOW_CHECK

const uint8_t OVERFLOW_CHECK[] = { 0, 0, 0, 1, 2, 3, 4, 5, 6}
static

Definition at line 235 of file redspy_temporal_client.cpp.

◆ READ_ACCESS_STATES

const uint64_t READ_ACCESS_STATES[] = { 0, ONE_BYTE_READ_ACTION, TWO_BYTE_READ_ACTION, 0, FOUR_BYTE_READ_ACTION, 0, 0, 0, EIGHT_BYTE_READ_ACTION}
static

Definition at line 233 of file redspy_temporal_client.cpp.

◆ RedMap

dense_hash_map<uint64_t, uint64_t> RedMap[THREAD_MAX]
static

◆ 

struct { ... } RedSpyGlobals

◆ sm

◆ value

◆ WRITE_ACCESS_STATES

const uint64_t WRITE_ACCESS_STATES[] = { 0, ONE_BYTE_WRITE_ACTION, TWO_BYTE_WRITE_ACTION, 0, FOUR_BYTE_WRITE_ACTION, 0, 0, 0, EIGHT_BYTE_WRITE_ACTION}
static

Definition at line 234 of file redspy_temporal_client.cpp.

◆ xedState

xed_state_t xedState

Definition at line 198 of file redspy_temporal_client.cpp.