Pin
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Groups Pages
Typedefs | Enumerations | Functions | Variables
image.cpp File Reference
#include "level_base.H"
#include "level_core.H"
#include "level_imgio.H"
#include "level_vmclient.H"
#include "level_pinclient.H"
#include <map>
#include "my_elf.h"
#include <limits.h>
#include <iostream>
#include <list>

Typedefs

typedef VOID(* LEVEL_PINCLIENT::IMAGECALLBACK )(IMG, VOID *)
 
typedef map< ADDRINT, USIZE > LEVEL_PINCLIENT::CODE_RANGES
 

Enumerations

enum  LEVEL_PINCLIENT::UNDECORATION {
  LEVEL_PINCLIENT::UNDECORATION_COMPLETE,
  LEVEL_PINCLIENT::UNDECORATION_NAME_ONLY
}
 
enum  LEVEL_PINCLIENT::SYMBOL_INFO_MODE {
  LEVEL_PINCLIENT::NO_SYMBOLS = 0,
  LEVEL_PINCLIENT::EXPORT_SYMBOLS = (1<<0),
  LEVEL_PINCLIENT::DEBUG_SYMBOLS = (1<<1),
  LEVEL_PINCLIENT::IFUNC_SYMBOLS = (1<<2),
  LEVEL_PINCLIENT::DEBUG_OR_EXPORT_SYMBOLS = (DEBUG_SYMBOLS | EXPORT_SYMBOLS)
}
 
enum  IMAGE_LOAD_FLAGS {
  IMAGE_LOAD_NONE = 0x00,
  LEVEL_PINCLIENT::IMAGE_LOAD_MAINEXECUTABLE = 0x01,
  LEVEL_PINCLIENT::IMAGE_LOAD_FOUNDINMEMORY = 0x02,
  LEVEL_PINCLIENT::IMAGE_LOAD_RUNTIME = 0x04,
  LEVEL_PINCLIENT::IMAGE_LOAD_TEXTFROMIMAGE = 0x08
}
 

Functions

LOCALVAR KNOB_COMMENT LEVEL_PINCLIENT::KnobSymFamily ("pintool:sym","Symbols controls")
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobUnrestrictedRtnSize (KNOB_MODE_WRITEONCE,"pintool:sym","unrestricted_rtn_size","0","Use the unrestricted RTN size. ""When set the RTN size defined by the distance between RTN start to the beginning of next RTN.")
 
LOCALVAR KNOB< BOOL > LEVEL_PINCLIENT::KnobShortName (KNOB_MODE_WRITEONCE,"pintool:sym","short_name","0","Use the shortest name for the RTN. ""Names with version substrings are preferred over the same name without the substring.")
 
KNOB< BOOL > LEVEL_PINCLIENT::KnobJitApi (KNOB_MODE_WRITEONCE,"pintool:sym","support_jit_api","0","Enables the Jitted Functions Support")
 
IMG LEVEL_PINCLIENT::IMG_Next (IMG img)
 
IMG LEVEL_PINCLIENT::IMG_Prev (IMG img)
 
IMG LEVEL_PINCLIENT::IMG_Invalid ()
 
BOOL LEVEL_PINCLIENT::IMG_Valid (IMG img)
 
SEC LEVEL_PINCLIENT::IMG_SecHead (IMG img)
 
SEC LEVEL_PINCLIENT::IMG_SecTail (IMG img)
 
SYM LEVEL_PINCLIENT::IMG_RegsymHead (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_Entry (IMG img)
 
const string & LEVEL_PINCLIENT::IMG_Name (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_Gp (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_LoadOffset (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_LowAddress (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_HighAddress (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_StartAddress (IMG img)
 
USIZE LEVEL_PINCLIENT::IMG_SizeMapped (IMG img)
 
IMG_TYPE LEVEL_PINCLIENT::IMG_Type (IMG img)
 
BOOL LEVEL_PINCLIENT::IMG_IsMainExecutable (IMG x)
 
BOOL LEVEL_PINCLIENT::IMG_IsStaticExecutable (IMG x)
 
UINT32 LEVEL_PINCLIENT::IMG_NumRegions (IMG img)
 
ADDRINT LEVEL_PINCLIENT::IMG_RegionHighAddress (IMG img, UINT32 n)
 
ADDRINT LEVEL_PINCLIENT::IMG_RegionLowAddress (IMG img, UINT32 n)
 
RTN LEVEL_PINCLIENT::IMG_FindRtnByName (IMG img, const string &name)
 
LOCALFUN RTN LEVEL_PINCLIENT::FinalizeRtn (RTN rtn, USIZE size)
 
LOCALFUN VOID LEVEL_PINCLIENT::AddRtnsToMap (IMG img)
 
IMG LEVEL_PINCLIENT::IMG_CreateAt (const char *filename, ADDRINT start, USIZE size, ADDRINT loadOffset, BOOL mainExecutable)
 
IMG LEVEL_PINCLIENT::SEC_Img (SEC sec)
 
SEC LEVEL_PINCLIENT::SEC_Next (SEC sec)
 
SEC LEVEL_PINCLIENT::SEC_Prev (SEC sec)
 
SEC LEVEL_PINCLIENT::SEC_Invalid ()
 
BOOL LEVEL_PINCLIENT::SEC_Valid (SEC x)
 
RTN LEVEL_PINCLIENT::SEC_RtnHead (SEC sec)
 
RTN LEVEL_PINCLIENT::SEC_RtnTail (SEC sec)
 
const string & LEVEL_PINCLIENT::SEC_Name (SEC sec)
 
SEC_TYPE LEVEL_PINCLIENT::SEC_Type (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_Mapped (SEC sec)
 
const VOID * LEVEL_PINCLIENT::SEC_Data (SEC sec)
 
SEC LEVEL_PINCLIENT::RTN_Sec (RTN x)
 
RTN LEVEL_PINCLIENT::RTN_Next (RTN x)
 
RTN LEVEL_PINCLIENT::RTN_Prev (RTN x)
 
RTN LEVEL_PINCLIENT::RTN_Invalid ()
 
BOOL LEVEL_PINCLIENT::RTN_Valid (RTN x)
 
LOCALINLINE RTN_OUTSIDE_RANGES & LEVEL_PINCLIENT::RtnOutsideRangesManager ()
 
LOCALFUN VOID LEVEL_PINCLIENT::DisassembleRegion (RTN rtn, BBL bbl, const VOID *current, const VOID *end, ADDRINT rtnStart, ADDRINT rtnEnd, ADDRINT virtual_offset)
 
LOCALFUN INS LEVEL_PINCLIENT::DisassembleFirstIns (const VOID *current, const VOID *end, ADDRINT virtual_offset)
 
LOCALFUN VOID LEVEL_PINCLIENT::FetchRtnIns (RTN rtn)
 
LOCALFUN INS LEVEL_PINCLIENT::FetchRtnInsFirstOnly (RTN rtn)
 
PIN_DEPRECATED_API BBL LEVEL_PINCLIENT::RTN_BblHead (RTN x)
 
PIN_DEPRECATED_API BBL LEVEL_PINCLIENT::RTN_BblTail (RTN x)
 
const string & LEVEL_PINCLIENT::RTN_Name (RTN x)
 
BOOL LEVEL_PINCLIENT::RTN_IsArtificial (RTN x)
 
SYM LEVEL_PINCLIENT::RTN_Sym (RTN x)
 
AFUNPTR LEVEL_PINCLIENT::RTN_Funptr (RTN x)
 
LOCALFUN VOID LEVEL_PINCLIENT::RTN_Destroy (RTN rtn)
 
INT32 LEVEL_PINCLIENT::RTN_Id (RTN x)
 
PIN_DEPRECATED_API INT32 LEVEL_PINCLIENT::RTN_No (RTN x)
 
INS LEVEL_PINCLIENT::BBL_InsHead (BBL x)
 
INS LEVEL_PINCLIENT::BBL_InsTail (BBL x)
 
BBL LEVEL_PINCLIENT::BBL_Next (BBL x)
 
BBL LEVEL_PINCLIENT::BBL_Prev (BBL x)
 
BOOL LEVEL_PINCLIENT::BBL_Valid (BBL x)
 
BBL_TYPE LEVEL_PINCLIENT::BBL_Type (BBL x)
 
EDG LEVEL_PINCLIENT::EDG_NextSucc (EDG x)
 
EDG LEVEL_PINCLIENT::EDG_INVALID ()
 
BOOL LEVEL_PINCLIENT::EDG_Valid (EDG x)
 
EDG_TYPE LEVEL_PINCLIENT::EDG_Type (EDG x)
 
RTN LEVEL_PINCLIENT::INS_Rtn (INS x)
 
INS LEVEL_PINCLIENT::INS_Next (INS x)
 
INS LEVEL_PINCLIENT::INS_Prev (INS x)
 
INS LEVEL_PINCLIENT::INS_Invalid ()
 
BOOL LEVEL_PINCLIENT::INS_Valid (INS x)
 
ADDRINT LEVEL_PINCLIENT::INS_Address (INS ins)
 
USIZE LEVEL_PINCLIENT::INS_Size (INS ins)
 
ADDRINT LEVEL_PINCLIENT::INS_DirectBranchOrCallTargetAddress (INS ins)
 
ADDRINT LEVEL_PINCLIENT::INS_NextAddress (INS ins)
 
SYM LEVEL_PINCLIENT::SYM_Next (SYM x)
 
SYM LEVEL_PINCLIENT::SYM_Prev (SYM x)
 
const string & LEVEL_PINCLIENT::SYM_Name (SYM x)
 
SYM LEVEL_PINCLIENT::SYM_Invalid ()
 
BOOL LEVEL_PINCLIENT::SYM_Valid (SYM x)
 
BOOL LEVEL_PINCLIENT::SYM_Dynamic (SYM x)
 
BOOL LEVEL_PINCLIENT::SYM_OriginatedFromIFunc (SYM x)
 
BOOL LEVEL_PINCLIENT::SYM_IFunc (SYM x)
 
ADDRINT LEVEL_PINCLIENT::SYM_Value (SYM x)
 
UINT32 LEVEL_PINCLIENT::SYM_Index (SYM x)
 
ADDRINT LEVEL_PINCLIENT::SYM_Address (SYM x)
 
IMG LEVEL_PINCLIENT::GetOpenImg ()
 
VOID LEVEL_PINCLIENT::ResetOpenRtn ()
 
VOID LEVEL_PINCLIENT::ResetOpenImg ()
 
VOID LEVEL_PINCLIENT::InitializeApp ()
 
VOID LEVEL_PINCLIENT::UnInitializeApp ()
 
UINT32 LEVEL_PINCLIENT::IMG_Id (IMG x)
 
IMG LEVEL_PINCLIENT::IMG_FindImgById (UINT32 id)
 
IMG LEVEL_PINCLIENT::IMG_FindByUnloadAddress (ADDRINT startAddress)
 
IMG LEVEL_PINCLIENT::IMG_FindByAddress (ADDRINT address)
 
IMG LEVEL_PINCLIENT::IMG_FindBySectionsAddress (ADDRINT address)
 
PIN_CALLBACK LEVEL_PINCLIENT::RTN_AddInstrumentFunction (RTN_INSTRUMENT_CALLBACK fun, VOID *val)
 
LOCALFUN BOOL LEVEL_PINCLIENT::operator< (const RTN_KEY &p1, const RTN_KEY &p2)
 
PIN_CALLBACK LEVEL_PINCLIENT::IMG_AddInstrumentFunction (IMAGECALLBACK fun, VOID *v)
 
VOID LEVEL_PINCLIENT::IMG_RemoveToolCallbacks ()
 
PIN_CALLBACK LEVEL_PINCLIENT::IMG_AddUnloadFunction (IMAGECALLBACK fun, VOID *v)
 
LOCALFUN VOID LEVEL_PINCLIENT::IMG_Destroy (IMG img)
 
VOID LEVEL_PINCLIENT::ProcessImageUnload (IMG img, BOOL copyBits)
 
VOID LEVEL_PINCLIENT::PIN_UnloadAllImages (BOOL copyBits)
 
VOID LEVEL_PINCLIENT::ProcessModuleUnload (ADDRINT base)
 
USIZE LEVEL_PINCLIENT::RTN_Range (RTN rtn)
 
USIZE LEVEL_PINCLIENT::RTN_Size (RTN rtn)
 
LOCALFUN VOID LEVEL_PINCLIENT::InitRtnToSym (RTN rtn, SYM sym)
 
LOCALFUN VOID LEVEL_PINCLIENT::UseShortName (RTN rtn, SYM sym)
 
LOCALFUN VOID LEVEL_PINCLIENT::BestFit (RTN rtn, SYM sym)
 
LOCALFUN INT LEVEL_PINCLIENT::SymPosition (SYM sym, const MemRange &range)
 
LOCALFUN VOID LEVEL_PINCLIENT::FindCodeRanges (IMG img, CODE_RANGES *rangeMap)
 
VOID LEVEL_PINCLIENT::NotifyDataRange (CODE_RANGES *rangeMap, ADDRINT base, USIZE size)
 
LOCALFUN VOID LEVEL_PINCLIENT::MakeRtns (IMG img)
 
VOID LEVEL_PINCLIENT::CallRtnCallbacks (RTN rtn)
 
LOCALFUN VOID LEVEL_PINCLIENT::CallRtnCallbacks (IMG img)
 
LOCALFUN IMG LEVEL_PINCLIENT::ImgLoad (const string &filename, const CHAR *trueFilename, ADDRINT load_offset, UINT32 flags, BOOL *unmapAfterProcessing, void *arg)
 
VOID LEVEL_PINCLIENT::IMG_RecordLoadOp (const string &imageName, const char *fileName, ADDRINT lo, UINT32 fl)
 
VOID LEVEL_PINCLIENT::IMG_RecordLoadOp (IMG img)
 
VOID LEVEL_PINCLIENT::IMG_ExecuteRecordedLoadOps ()
 
IMG LEVEL_PINCLIENT::IMG_Open (const string &filename)
 
VOID LEVEL_PINCLIENT::IMG_Close (IMG img)
 
LOCALFUN THREAD_CONTEXT LEVEL_PINCLIENT::NewThread ()
 
LOCALFUN VOID LEVEL_PINCLIENT::ImageLoadProbes (IMG img)
 
LOCALFUN BOOL LEVEL_PINCLIENT::CheckImgIntersection (ADDRINT lowaddr, ADDRINT highaddr, IMG img)
 
LOCALFUN IMG LEVEL_PINCLIENT::IMG_CheckIntersectingImg (IMG newimg, ADDRINT lowaddr, ADDRINT highaddr)
 
VOID LEVEL_PINCLIENT::IMG_HandleImageIntersection (IMG new_img, VOID *arg)
 
IMG LEVEL_PINCLIENT::ProcessImageLoad (const string &filename, const CHAR *trueFilename, ADDRINT load_offset, UINT32 flags, void *arg)
 
VOID LEVEL_PINCLIENT::IMG_ReplayImageLoad (IMG img)
 
VOID LEVEL_PINCLIENT::CompleteImageLoad (IMG img, void *arg)
 
VOID LEVEL_PINCLIENT::InitDynamicCodeImage (IMG newImg)
 
BOOL LEVEL_PINCLIENT::IsPinLoaded (const string &name)
 
string LEVEL_PINCLIENT::RTN_FindNameByAddress (ADDRINT address)
 
RTN LEVEL_PINCLIENT::RTN_FindByAddress (ADDRINT address)
 
RTN LEVEL_PINCLIENT::RTN_FindByName (IMG img, const CHAR *name)
 
VOID LEVEL_PINCLIENT::RTN_Open (RTN rtn)
 
VOID LEVEL_PINCLIENT::RTN_OpenAndFetch (RTN rtn)
 
VOID LEVEL_PINCLIENT::RTN_Close (RTN rtn)
 
INS LEVEL_PINCLIENT::RTN_InsHead (RTN rtn)
 
INS LEVEL_PINCLIENT::RTN_InsHeadOnly (RTN rtn)
 
INS LEVEL_PINCLIENT::RTN_InsTail (RTN rtn)
 
UINT32 LEVEL_PINCLIENT::RTN_NumIns (RTN rtn)
 
VOID LEVEL_PINCLIENT::RTN_InsertCall (RTN rtn, IPOINT action, AFUNPTR funptr,...)
 
ADDRINT LEVEL_PINCLIENT::RTN_Address (RTN rtn)
 
RTN LEVEL_PINCLIENT::RTN_CreateAt (ADDRINT address, string name)
 
RTN LEVEL_PINCLIENT::RTN_CreateJitFunction (IMG img, ADDRINT address, const string &name, USIZE size)
 
VOID LEVEL_PINCLIENT::RTN_DestroyJitFunction (ADDRINT address)
 
BOOL LEVEL_PINCLIENT::RTN_IsDynamic (RTN rtn)
 
ADDRINT LEVEL_PINCLIENT::SEC_Address (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_IsReadable (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_IsWriteable (SEC sec)
 
BOOL LEVEL_PINCLIENT::SEC_IsExecutable (SEC sec)
 
USIZE LEVEL_PINCLIENT::SEC_Size (SEC sec)
 
BOOL LEVEL_PINCLIENT::BBL_Original (BBL bbl)
 
ADDRINT LEVEL_PINCLIENT::BBL_Address (BBL bbl)
 
USIZE LEVEL_PINCLIENT::BBL_Size (BBL bbl)
 
IMG LEVEL_PINCLIENT::APP_ImgHead ()
 
IMG LEVEL_PINCLIENT::APP_ImgTail ()
 
BOOL LEVEL_PINCLIENT::ToolUseImageAPI ()
 
string LEVEL_PINCLIENT::PIN_UndecorateSymbolName (const string &symbolName, UNDECORATION style)
 

Variables

LOCALTYPE typedef pair
< RTN_KEY, RTN > 
LEVEL_PINCLIENT::RTN_PAIR
 
LOCALTYPE typedef map< RTN_KEY,
RTN > 
LEVEL_PINCLIENT::RTN_MAP
 
LOCALTYPE typedef list< MemRange > LEVEL_PINCLIENT::RTN_OUTSIDE_RANGES_LIST
 
LOCALTYPE typedef map< ADDRINT,
OUTSIDE_TARGET_MEM_RANGE,
std::less< ADDRINT > > 
LEVEL_PINCLIENT::RTN_OUTSIDE_RANGES_MAP
 
LOCALTYPE typedef map< ADDRINT,
OUTSIDE_TARGET, std::less
< ADDRINT > > 
LEVEL_PINCLIENT::RTN_OUTSIDE_TARGETS_MAP
 
LOCALTYPE typedef map< ADDRINT,
BBL, std::less< ADDRINT > > 
LEVEL_PINCLIENT::RTN_OUTSIDE_PREV_BBLS_MAP
 
LOCALTYPE typedef vector< INS > LEVEL_PINCLIENT::RTN_UJMP_VECTOR
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< IMAGECALLBACK > 
LEVEL_PINCLIENT::IMAGECALLBACKVAL
 
LOCALTYPE typedef
IMAGECALLBACKVAL::FUNS 
LEVEL_PINCLIENT::IMAGECALLBACKFUNS
 
LOCALTYPE typedef
COMPLEX_CALLBACKVAL
< RTN_INSTRUMENT_CALLBACK > 
LEVEL_PINCLIENT::RTN_INSTRUMENT_CALLBACKVAL
 
LOCALTYPE typedef
RTN_INSTRUMENT_CALLBACKVAL::FUNS 
LEVEL_PINCLIENT::RTN_INSTRUMENT_CALLBACKFUNS
 
LOCALVAR RTN_MAP LEVEL_PINCLIENT::rtn_map
 
LOCALVAR const char * LEVEL_PINCLIENT::WHOLE_TEXT_SECTION =".text"
 
LOCALVAR const char * LEVEL_PINCLIENT::UNNAMED_IMAGE_ENTRY_POINT ="unnamedImageEntryPoint"
 
LOCALVAR IMAGECALLBACKFUNS LEVEL_PINCLIENT::imageLoadList
 
LOCALVAR IMAGECALLBACKFUNS LEVEL_PINCLIENT::imageUnloadList
 
LOCALVAR APP LEVEL_PINCLIENT::app
 
LOCALVAR RTN LEVEL_PINCLIENT::OpenRtn
 
LOCALVAR IMG LEVEL_PINCLIENT::OpenImg
 
LOCALVAR
RTN_INSTRUMENT_CALLBACKFUNS 
LEVEL_PINCLIENT::rtnList
 
LOCALVAR std::list< IMAGE_LOAD_OP > LEVEL_PINCLIENT::savedImageLoadOps
 
LOCALVAR std::list
< IMAGE_LOAD_OP2 > 
LEVEL_PINCLIENT::savedImageLoadOps2
 

Detailed Description

Static model for instrumenting IMG's once they are loaded into memory.