Pin
|
#include "level_base.H"
#include "level_core.H"
#include "level_imgio.H"
#include "level_vmclient.H"
#include "level_pinclient.H"
#include <map>
#include <limits.h>
#include <iostream>
#include <list>
Classes | |
class | LEVEL_PINCLIENT::RTN_KEY |
class | LEVEL_PINCLIENT::IMG_IDENTIFIER |
struct | LEVEL_PINCLIENT::OUTSIDE_TARGET_MEM_RANGE |
struct | LEVEL_PINCLIENT::OUTSIDE_TARGET |
class | LEVEL_PINCLIENT::RTN_OUTSIDE_RANGES |
class | LEVEL_PINCLIENT::SymbolAddressRange |
struct | LEVEL_PINCLIENT::SymbolDebugInfo |
class | LEVEL_PINCLIENT::IMAGE_LOAD_OP |
class | LEVEL_PINCLIENT::IMAGE_LOAD_OP2 |
Typedefs | |
typedef VOID(* | LEVEL_PINCLIENT::IMAGECALLBACK) (IMG, VOID *) |
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) } |
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.") |
LOCALVAR KNOB< BOOL > | LEVEL_PINCLIENT::KnobIgnoreDebugInfo (KNOB_MODE_WRITEONCE, "pintool:sym", "ignore_debug_info", "0", "Ignore debug info for the image. Symbols are taken from the symbol tables.") |
LOCALVAR KNOB< std::string > | LEVEL_PINCLIENT::KnobReduceRtnSizeMode (KNOB_MODE_WRITEONCE, "pintool:sym", "reduce_rtn_size_mode", "auto", "Mode for RTN size reduction: delete trailing instructions after RET if there is no " "jump to the rtn part after the RET. " "Possible modes are: auto/never/always") |
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) |
PIN_DEPRECATED_API ADDRINT | LEVEL_PINCLIENT::IMG_Entry (IMG img) |
ADDRINT | LEVEL_PINCLIENT::IMG_EntryAddress (IMG img) |
BOOL | LEVEL_PINCLIENT::IMG_HasProperty (IMG img, IMG_PROPERTY property) |
const std::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_hasLinesData (IMG x) |
BOOL | LEVEL_PINCLIENT::IMG_IsInterpreter (IMG x) |
BOOL | LEVEL_PINCLIENT::IMG_IsStaticExecutable (IMG x) |
BOOL | LEVEL_PINCLIENT::IMG_IsVDSO (IMG img) |
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) |
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 std::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 rtnLimit, ADDRINT virtual_offset) |
LOCALFUN INS | LEVEL_PINCLIENT::DisassembleFirstIns (const VOID *current, const VOID *end, ADDRINT limit, ADDRINT virtual_offset) |
LOCALFUN VOID | LEVEL_PINCLIENT::FetchRtnIns (RTN rtn) |
LOCALFUN INS | LEVEL_PINCLIENT::FetchRtnInsFirstOnly (RTN rtn) |
const std::string & | LEVEL_PINCLIENT::RTN_Name (RTN x) |
BOOL | LEVEL_PINCLIENT::RTN_IsArtificial (RTN x) |
SYM | LEVEL_PINCLIENT::RTN_Sym (RTN x) |
UINT | LEVEL_PINCLIENT::RTN_DynamicMethodId (RTN x) |
AFUNPTR | LEVEL_PINCLIENT::RTN_Funptr (RTN x) |
LOCALFUN VOID | LEVEL_PINCLIENT::RTN_Destroy (RTN rtn) |
UINT32 | LEVEL_PINCLIENT::RTN_Id (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) |
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) |
PIN_DEPRECATED_API ADDRINT | LEVEL_PINCLIENT::INS_DirectBranchOrCallTargetAddress (INS ins) |
ADDRINT | LEVEL_PINCLIENT::INS_DirectControlFlowTargetAddress (INS ins) |
ADDRINT | LEVEL_PINCLIENT::INS_NextAddress (INS ins) |
SYM | LEVEL_PINCLIENT::SYM_Next (SYM x) |
SYM | LEVEL_PINCLIENT::SYM_Prev (SYM x) |
const std::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_GeneratedByPin (SYM x) |
BOOL | LEVEL_PINCLIENT::SYM_IFuncImplementation (SYM x) |
BOOL | LEVEL_PINCLIENT::SYM_IFuncResolver (SYM x) |
ADDRINT | LEVEL_PINCLIENT::SYM_Value (SYM x) |
UINT32 | LEVEL_PINCLIENT::SYM_Index (SYM x) |
ADDRINT | LEVEL_PINCLIENT::SYM_Address (SYM x) |
UINT32 | LEVEL_PINCLIENT::IMG_Id (IMG x) |
IMG | LEVEL_PINCLIENT::IMG_FindImgById (UINT32 id) |
IMG | LEVEL_PINCLIENT::IMG_FindByAddress (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) |
PIN_CALLBACK | LEVEL_PINCLIENT::IMG_AddUnloadFunction (IMAGECALLBACK fun, VOID *v) |
LOCALFUN VOID | LEVEL_PINCLIENT::IMG_Destroy (IMG img) |
USIZE | LEVEL_PINCLIENT::RTN_Range (RTN rtn) |
USIZE | LEVEL_PINCLIENT::RTN_Size (RTN rtn) |
RTN | LEVEL_PINCLIENT::RTN_IFuncResolver (RTN rtn) |
RTN | LEVEL_PINCLIENT::RTN_IFuncImplementation (RTN rtn) |
LOCALFUN VOID | LEVEL_PINCLIENT::InitRtnToSym (RTN rtn, SYM sym) |
LOCALFUN VOID | LEVEL_PINCLIENT::UseShortName (RTN rtn, SYM sym) |
LOCALFUN UINT | LEVEL_PINCLIENT::RegionFromSegName (IMG img, const std::string &segname) |
LOCALFUN VOID | LEVEL_PINCLIENT::BestFit (RTN rtn, SYM sym) |
LOCALFUN INT | LEVEL_PINCLIENT::SymPosition (SYM sym, const MemRange &range) |
LOCALFUN RTN | LEVEL_PINCLIENT::FinalizeRtn (RTN rtn, USIZE size) |
LOCALFUN VOID | LEVEL_PINCLIENT::AddRtnsToMap (IMG img) |
LOCALFUN VOID | LEVEL_PINCLIENT::FixSymbolsFromDebugInfo (IMG img) |
LOCALFUN IMG | LEVEL_PINCLIENT::ImgLoad (const std::string &filename, const CHAR *trueFilename, ADDRINT load_offset, UINT32 flags, BOOL *unmapAfterProcessing, void *arg) |
IMG | LEVEL_PINCLIENT::IMG_Open (const std::string &filename) |
VOID | LEVEL_PINCLIENT::IMG_Close (IMG img) |
LOCALFUN VOID | LEVEL_PINCLIENT::ImageLoadProbes (IMG img) |
std::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_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, std::string name) |
LOCALINLINE ADDRINT | LEVEL_PINCLIENT::AlignToPageDown (ADDRINT addr) |
LOCALINLINE ADDRINT | LEVEL_PINCLIENT::AlignToPageUp (ADDRINT addr) |
LOCALFUN VOID | LEVEL_PINCLIENT::UpdateDynamicImgRegions (IMG img, ADDRINT rtn_low_addr, ADDRINT rtn_high_addr) |
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 () |
std::string | LEVEL_PINCLIENT::PIN_UndecorateSymbolName (const std::string &symbolName, UNDECORATION style) |
Static model for instrumenting IMG's once they are loaded into memory.
BBL_TYPE LEVEL_PINCLIENT::BBL_Type | ( | BBL | x | ) |
LOCALFUN VOID LEVEL_PINCLIENT::DisassembleRegion | ( | RTN | rtn, |
BBL | bbl, | ||
const VOID * | current, | ||
const VOID * | end, | ||
ADDRINT | rtnStart, | ||
ADDRINT | rtnEnd, | ||
ADDRINT | rtnLimit, | ||
ADDRINT | virtual_offset | ||
) |
RtnOutsideRangesManager().HaveRet()
LOCALFUN VOID LEVEL_PINCLIENT::FixSymbolsFromDebugInfo | ( | IMG | img | ) |
This function compares the symbols previously read from the symbol tables with with the symbols read from the debug information. In case of conflict, the function will fix the symbol based on the information from the debug info. Conflicts may appear for example in the case of functions with multiple entry points. Each entry point will have its own label in the symbol table. This function will merge symbols that belong to the same function into a single symbol.
[in] | img | The image |
LOCALFUN IMG LEVEL_PINCLIENT::ImgLoad | ( | const std::string & | filename, |
const CHAR * | trueFilename, | ||
ADDRINT | load_offset, | ||
UINT32 | flags, | ||
BOOL * | unmapAfterProcessing, | ||
void * | arg | ||
) |
Create an image (IMG) for an already loaded image or load a new image into memory and create an IMG for it. When IMAGE_LOAD_RUNTIME is being used in flags it implies the image is an already loaded image otherwise it implies that we are mapping a new image.
On Unix (Linux & macOS) we map the image again even for an already loaded image because it's more convenient to us. When the loader or the kernel maps a file into memory it may split it in memory into several parts which makes it harder to parse. When we map the file using regular mapping system call it will map it in one chunk which makes it easier to parse. In these cases unmapAfterProcessing will be set to TRUE so that the duplicated image will be removed.
param[in] filename Image filename param[in] trueFilename Image filename - TODO - clarify difference compared to userFilename or unite!. param[in] load_offset Image load address for images which are already loaded param[in] flags Bitwise flags of IMAGE_LOAD_FLAGS param[out] unmapAfterProcessing If not NULL, True if image should be unmapped after IMG object had been created param[in] arg opaque pointer (OS specific), NULL if not used
KNOB<BOOL> LEVEL_PINCLIENT::KnobJitApi | ( | KNOB_MODE_WRITEONCE | , |
"pintool:sym" | , | ||
"support_jit_api" | , | ||
"0" | , | ||
"Enables the Jitted Functions Support" | |||
) |
This knob enables the Jitted Functions Support.
LOCALFUN VOID LEVEL_PINCLIENT::RTN_Destroy | ( | RTN | rtn | ) |
an rtn No RTN can be open when destroying an RTN