|
Pin
|
Functions | |
| BOOL | INS_HasRealRep (INS ins) |
| BOOL | INS_IsStandardMemop (INS ins) |
| BOOL | INS_IsCacheLineFlush (INS ins) |
| INT32 | INS_Category (const INS ins) |
| INT32 | INS_Extension (const INS ins) |
| UINT32 | INS_EffectiveAddressWidth (INS ins) |
| PIN_DEPRECATED_API USIZE | INS_MemoryWriteSize (INS ins) |
| PIN_DEPRECATED_API USIZE | INS_MemoryReadSize (INS ins) |
| PREDICATE | INS_GetPredicate (INS ins) |
| BOOL | INS_IsMemoryRead (INS ins) |
| BOOL | INS_IsMemoryWrite (INS ins) |
| BOOL | INS_HasMemoryRead2 (INS ins) |
| BOOL | INS_HasFallThrough (INS ins) |
| BOOL | INS_IsSysenter (INS ins) |
| BOOL | INS_IsXbegin (INS ins) |
| BOOL | INS_IsXend (INS ins) |
| BOOL | INS_IsLea (INS ins) |
| BOOL | INS_IsNop (INS ins) |
| std::string | OPCODE_StringShort (UINT32 opcode) |
| std::string | INS_Mnemonic (INS ins) |
| BOOL | INS_IsBranch (INS ins) |
| BOOL | INS_IsDirectBranch (INS ins) |
| BOOL | INS_IsDirectCall (INS ins) |
| PIN_DEPRECATED_API BOOL | INS_IsDirectBranchOrCall (INS ins) |
| BOOL | INS_IsDirectControlFlow (INS ins) |
| BOOL | INS_IsHalt (INS ins) |
| PIN_DEPRECATED_API BOOL | INS_IsBranchOrCall (INS ins) |
| BOOL | INS_Stutters (INS ins) |
| BOOL | INS_IsPcMaterialization (INS ins) |
| BOOL | INS_IsCall (INS ins) |
| BOOL | INS_IsControlFlow (INS ins) |
| BOOL | INS_IsFarCall (INS ins) |
| BOOL | INS_IsFarJump (INS ins) |
| BOOL | INS_IsDirectFarJump (INS ins) |
| BOOL | INS_IsValidForIpointAfter (INS ins) |
| BOOL | INS_IsValidForIpointTakenBranch (INS ins) |
| BOOL | INS_IsVgather (INS ins) |
| BOOL | INS_IsVscatter (INS ins) |
| BOOL | INS_HasMemoryVector (INS ins) |
| BOOL | INS_HasScatteredMemoryAccess (INS ins) |
| BOOL | INS_IsAmx (INS ins) |
| VOID | INS_GetFarPointer (INS ins, UINT16 &segment_selector, UINT32 &displacement) |
| BOOL | INS_IsProcedureCall (INS ins) |
| BOOL | INS_IsInterrupt (INS ins) |
| BOOL | INS_IsRet (INS ins) |
| BOOL | INS_IsSysret (INS ins) |
| BOOL | INS_IsFarRet (INS ins) |
| BOOL | INS_IsPrefetch (INS ins) |
| BOOL | INS_IsSub (const INS ins) |
| BOOL | INS_IsMov (const INS ins) |
| BOOL | INS_IsMovdir64b (const INS ins) |
| BOOL | INS_IsMovFullRegRegSame (const INS ins) |
| BOOL | INS_IsAtomicUpdate (const INS ins) |
| BOOL | INS_IsRDTSC (const INS ins) |
| BOOL | INS_IsMaskMov (const INS ins) |
| REG | INS_RepCountRegister (INS ins) |
| PIN_DEPRECATED_API BOOL | INS_IsIndirectBranchOrCall (INS ins) |
| BOOL | INS_IsIndirectControlFlow (INS ins) |
| REG | INS_SegmentRegPrefix (INS ins) |
| BOOL | INS_HasExplicitMemoryReference (INS ins) |
| VOID | PIN_SetSyntaxIntel () |
| VOID | PIN_SetSyntaxATT () |
| VOID | PIN_SetSyntaxXED () |
| REG | INS_RegR (INS x, UINT32 k) |
| REG | INS_RegW (INS x, UINT32 k) |
| OPCODE | INS_Opcode (INS ins) |
| std::string | CATEGORY_StringShort (UINT32 num) |
| std::string | EXTENSION_StringShort (UINT32 num) |
| BOOL | INS_SegPrefixIsMemoryRead (INS ins) |
| BOOL | INS_SegPrefixIsMemoryWrite (INS ins) |
| BOOL | INS_AddressSizePrefix (INS ins) |
| BOOL | INS_BranchNotTakenPrefix (INS ins) |
| BOOL | INS_BranchTakenPrefix (INS ins) |
| BOOL | INS_LockPrefix (INS ins) |
| BOOL | INS_OperandSizePrefix (INS ins) |
| BOOL | INS_RepPrefix (INS ins) |
| BOOL | INS_RepnePrefix (INS ins) |
| BOOL | INS_SegmentPrefix (INS ins) |
| BOOL | INS_IsXchg (INS ins) |
| BOOL | INS_IsStringop (INS ins) |
| BOOL | INS_IsIRet (INS ins) |
| UINT32 | INS_MaxNumRRegs (INS x) |
| UINT32 | INS_MaxNumWRegs (INS x) |
| BOOL | INS_RegRContain (const INS ins, const REG reg) |
| BOOL | INS_RegWContain (const INS ins, const REG reg) |
| BOOL | INS_FullRegRContain (const INS ins, const REG reg) |
| BOOL | INS_FullRegWContain (const INS ins, const REG reg) |
| BOOL | INS_IsStackRead (const INS ins) |
| BOOL | INS_IsStackWrite (const INS ins) |
| BOOL | INS_IsIpRelRead (const INS ins) |
| BOOL | INS_IsIpRelWrite (const INS ins) |
| BOOL | INS_IsPredicated (INS ins) |
| BOOL | INS_IsOriginal (INS ins) |
| std::string | INS_Disassemble (INS ins) |
| ADDRDELTA | INS_MemoryDisplacement (INS ins) |
| REG | INS_MemoryBaseReg (INS ins) |
| REG | INS_MemoryIndexReg (INS ins) |
| UINT32 | INS_MemoryScale (INS ins) |
| BOOL | INS_ChangeReg (const INS ins, const REG old_reg, const REG new_reg, const BOOL as_read) |
| xed_decoded_inst_t * | INS_XedDec (INS ins) |
| REG | INS_XedExactMapToPinReg (xed_reg_enum_t xed_reg) |
| PIN_DEPRECATED_API REG | INS_XedExactMapToPinReg (unsigned int r) |
| xed_reg_enum_t | INS_XedExactMapFromPinReg (REG pin_reg) |
| UINT32 | INS_OperandCount (INS ins) |
| UINT32 | INS_OperandElementCount (INS ins, UINT32 opIdx) |
| BOOL | INS_OperandHasElements (INS ins, UINT32 opIdx) |
| USIZE | INS_OperandElementSize (INS ins, UINT32 opIdx) |
| UINT32 | INS_OperandNameId (INS ins, UINT32 n) |
| BOOL | INS_OperandIsMemory (INS ins, UINT32 n) |
| REG | INS_OperandMemoryBaseReg (INS ins, UINT32 n) |
| REG | INS_OperandMemoryIndexReg (INS ins, UINT32 n) |
| REG | INS_OperandMemorySegmentReg (INS ins, UINT32 n) |
| UINT32 | INS_OperandMemoryScale (INS ins, UINT32 n) |
| ADDRDELTA | INS_OperandMemoryDisplacement (INS ins, UINT32 n) |
| BOOL | INS_OperandIsFixedMemop (INS ins, UINT32 n) |
| VOID | GetNumberAndSizeOfMemAccesses (INS ins, int *numAccesses, int *accessSize, int *indexSize) |
| UINT32 | INS_MemoryOperandCount (INS ins) |
| UINT32 | INS_MemoryOperandElementCount (INS ins, UINT32 memoryOp) |
| USIZE | INS_MemoryOperandSize (INS ins, UINT32 memoryOp) |
| USIZE | INS_MemoryOperandElementSize (INS ins, UINT32 memoryOp) |
| BOOL | INS_OperandIsAddressGenerator (INS ins, UINT32 n) |
| BOOL | INS_OperandIsBranchDisplacement (INS ins, UINT32 n) |
| BOOL | INS_MemoryOperandIsRead (INS ins, UINT32 memopIdx) |
| BOOL | INS_MemoryOperandIsWritten (INS ins, UINT32 memopIdx) |
| UINT32 | INS_MemoryOperandIndexToOperandIndex (INS ins, UINT32 memopIdx) |
| BOOL | INS_OperandIsReg (INS ins, UINT32 n) |
| BOOL | INS_OperandIsSegmentReg (INS ins, UINT32 n) |
| REG | INS_OperandReg (INS ins, UINT32 n) |
| BOOL | INS_OperandIsImmediate (INS ins, UINT32 n) |
| UINT64 | INS_OperandImmediate (INS ins, UINT32 n) |
| BOOL | INS_OperandIsImplicit (INS ins, UINT32 n) |
| BOOL | INS_RegIsImplicit (INS ins, REG reg) |
| UINT32 | INS_OperandWidth (INS ins, UINT32 n) |
| UINT32 | INS_OperandSize (INS ins, UINT32 n) |
| BOOL | INS_OperandRead (INS ins, UINT32 n) |
| BOOL | INS_OperandWritten (INS ins, UINT32 n) |
| BOOL | INS_OperandReadOnly (INS ins, UINT32 n) |
| BOOL | INS_OperandWrittenOnly (INS ins, UINT32 n) |
| BOOL | INS_OperandReadAndWritten (INS ins, UINT32 n) |
| REG | INS_MaskRegister (INS ins) |
| BOOL | INS_IsSyscall (INS ins) |
| SYSCALL_STANDARD | INS_SyscallStd (INS ins) |
| RTN | INS_Rtn (INS x) |
| INS | INS_Next (INS x) |
| INS | INS_Prev (INS x) |
| INS | INS_Invalid () |
| BOOL | INS_Valid (INS x) |
| ADDRINT | INS_Address (INS ins) |
| USIZE | INS_Size (INS ins) |
| PIN_DEPRECATED_API ADDRINT | INS_DirectBranchOrCallTargetAddress (INS ins) |
| ADDRINT | INS_DirectControlFlowTargetAddress (INS ins) |
| ADDRINT | INS_NextAddress (INS ins) |
| BOOL | INS_IsAddedForFunctionReplacement (INS ins) |
| BOOL | INS_IsValidForIarg (INS ins, IARG_TYPE argType) |
Variables | |
| const UINT32 | VSYSCALL_NR = 0xABCDDCBA |
Functions to examine IA-32 and Intel(R) 64 instructions.
| enum MEMORY_TYPE |
Memory type of argument
| enum PREDICATE |
Predicate abstraction for IA-32 and Intel(R) 64 instructions.
This file contains basic abstractions for IA32
| enum SYSCALL_STANDARD |
Calling standard of the system call instruction.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
The category of an instruction is a higher level semantic description of an instruction than its opcode (INS_Opcode). So, for instance, you can test for a conditional branch by using INS_Category(ins) == XED_CATEGORY_COND_BR, whereas using INS_Opcode(ins) would require that you enumerate all twenty conditional branch opcodes.
The full mapping of opcodes to categories can be found in the idata.txt file in the Intel(R) X86 Encoder Decoder distribution (which is distributed as part of the Pin kit). The category enumeration can be found in the file "xed-category-enum.h".
A category can be converted into a string by using CATEGORY_StringShort.
|
extern |
Change all occurrences of old_reg to new_reg in the r/w sets of the ins. Return TRUE if at least one occurrence changed.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
CMOVcc and FMOVcc instructions are treated as predicated. Rep string ops are treated as predicated.
|
extern |
Test if this instruction has an explict memory operand. We include the memory operand in lea.
|
extern |
If INS_HasFallThrough(INS) is TRUE, then the instruction may execute the "natural" next instruction (i.e. the one which starts immediately after this one), if it is FALSE, then the instruction following the one tested will not (normally) be executed next. So HasFallThrough is TRUE for instructions which don't change the control flow (most instructions), or for conditional branches (which might change the control flow, but might not), and FALSE for unconditional branches and calls (where the next instruction to be executed is always explicitly specified).
Note that an unconditional branch or call to the next instruction still doesn't have a fall-through, since a fall through is the implicitly following instruction, and an unconditional branch never uses that.
|
extern |
|
extern |
|
extern |
this file contains functions visible in level_core it uses primitives from level_core_with_ia32_ins but does not leak out any IA32 stuff!
|
extern |
|
extern |
|
extern |
Return TRUE if ins is not an original instruction in the application, but is an instruction added by Pin for doing function replacement. Pin allows you to even instrument these non-original instructions in JIT mode.
|
extern |
Return TRUE iff the ins is an AMX instruction
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
These are supposed to be near relative branches.
|
extern |
These are supposed to be near relative branches.
|
extern |
These are supposed to be near relative branches.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
Return TRUE if the INS is an interrupt category instruction
|
extern |
Is an IP-relative read
|
extern |
Is an IP-relative write
|
extern |
Returns true iff the given ins is an iret instruction.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
returns true if this instruction is a move.
|
extern |
returns true if this instruction is movdir64.
|
extern |
returns true if this instruction is a mov reg1, reg1. And reg1 is a full reg
|
extern |
|
extern |
|
extern |
|
extern |
We treat these instructions as predicated conditional move (CMOVcc) floating conditional move (FCMOVcc) rep string ops (since they don't execute if GCX==0)
|
extern |
|
extern |
|
extern |
|
extern |
Returns true if the given ins is a ret instruction.
|
extern |
Access to the stack simply means that the instruction accesses memory relative to the stack pointer (ESP or RSP), or the frame pointer (EBP or RBP). In code compiled without a frame pointer (where EBP/RBP is used as a general register), this may give a misleading result.
|
extern |
Detection of stack accesses is done in the same way as for INS_IsStackRead, so the same caveats apply here too.
|
extern |
|
extern |
|
extern |
returns true if this instruction is a subtract.
|
extern |
Syscall information for Unix/x86 systems
|
extern |
|
extern |
|
extern |
This file contains functions that inspect instructions with regard to IARGs.
This function checks whether the IARG can be used with the instruction. Currently the supported IARGs are IARG_MULTI_ELEMENT_OPERAND and IARG_REWRITE_SCATTERED_MEMOP. For all other IARGs the function will return TRUE.
| [in] | ins | The instruction to inspect |
| [in] | argType | The IARG_TYPE enum to use with the instruction |
@Return true if the specified IARG type can be used in the specified instruction, false otherwise.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
Returns the mask register used in the given instruction if such exist, REG_INVALID otherwise.
| [in] | ins | The vector instruction in question. |
|
extern |
ELF specific stuff related to INS
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
| [in] | ins | the instruction. |
| [in] | memoryOp | the memory operand index whose element size is required. |
|
extern |
Convert a memory operand index into a simple operand index.
| [in] | ins | The instruction. |
| [in] | memopIdx | Memory operand's index in the range [0, n-1], where n is from INS_MemoryOperandCount(). |
|
extern |
|
extern |
|
extern |
| [in] | ins | the instruction. |
| [in] | memoryOp | the memory operand index whose size is required. |
|
extern |
|
extern |
|
extern |
|
extern |
Only use this function if you really want a printable version of the instruction's opcode.
If you are trying to test what the opcode of an instruction is, use INS_Opcode and compare it with one of the XED_ICLASS values, or use one of the INS_Is... calls such as INS_IsMov, rather than using this function and comparing a string. Generating and comparing strings is much slower than comparing small integer values!
|
extern |
|
extern |
Get the address of the next instruction.
|
extern |
On ia-32 and Intel64 the opcodes are constants of the form XED_ICLASS_name. The full list of valid opcodes can be found in the idata.txt file in the Intel(R) X86 Encoder Decoder distribution (which is distributed as part of the Pin kit), and the enum definitions are in the file "xed-iclass-enum.h".
Use INS_Mnemonic if you want a string.
|
extern |
ia32 specific stuff related to OPERAND
Tells the number of operands for the instruction. Several other APIs take an operand index as a parameter. Those APIs expect an index in the range [0, n-1], where n is the value returned by INS_OperandCount().
| [in] | ins | The instruction. |
|
extern |
| [in] | ins | The instruction. |
| [in] | opIdx | The operand index whose element count is required. The operand can be either a memory operand or a register operand. |
|
extern |
| [in] | ins | The instruction. |
| [in] | opIdx | The operand index whose element size is required. The operand can be either a memory operand or a register operand. |
|
extern |
| [in] | ins | The instruction. |
| [in] | opIdx | The operand index. The operand can be either a memory operand or a register operand. |
|
extern |
Although return type is UINT64, on 32-bit systems only the lower 32 bits are utilized. To see how to retrieve immediate values with correct width and sign information, see example in test tool PinTools/SimpleExamples/oper-imm.cpp.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
Note: this does not include LEA operands.
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
Tells if an instruction operand is a source; it may also be a destination.
| [in] | ins | The instruction. |
| [in] | n | Operand's index in the range [0, n-1], where n is from INS_OperandCount(). |
|
extern |
Tells if an instruction operand is both a source and a destination.
| [in] | ins | The instruction. |
| [in] | n | Operand's index in the range [0, n-1], where n is from INS_OperandCount(). |
|
extern |
Tells if an instruction operand is just a source (and not a destination).
| [in] | ins | The instruction. |
| [in] | n | Operand's index in the range [0, n-1], where n is from INS_OperandCount(). |
|
extern |
|
extern |
This function will generate an error for memory operands in instructions where INS_HasScatteredMemoryAccess returns TRUE.
|
extern |
|
extern |
|
extern |
Tells if an instruction operand is a destination; it may also be a source.
| [in] | ins | The instruction. |
| [in] | n | Operand's index in the range [0, n-1], where n is from INS_OperandCount(). |
|
extern |
Tells if an instruction operand is just a destination (and not a source).
| [in] | ins | The instruction. |
| [in] | n | Operand's index in the range [0, n-1], where n is from INS_OperandCount(). |
|
extern |
|
extern |
Assumes that reg is a PIN register
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
|
extern |
Check to see if the given instruction is a system call and return corresponding calling standard.
|
extern |
|
extern |
Intel(R) X86 Encoder Decoder low-level support routines.
This supports the other core_ia32 files and is the lowest level interface to Intel(R) XED encoding/decoding.
|
extern |
Convert Pin REG type (application register) to an Intel(R) X86 Encoder Decoder xed_reg_enum_t register.
|
extern |
Convert a Intel(R) X86 Encoder Decoder xed_reg_enum_t register to a Pin REG type.
|
extern |
Convert a Intel(R) X86 Encoder Decoder xed_reg_enum_t register to a Pin REG type.
|
extern |
|
extern |
Sets the disassembly syntax to ATT SYSV format. (Destination on the right)
|
extern |
Sets the disassembly syntax to Intel format. (Destination on the left)
|
extern |
Sets the disassembly syntax to Intel(R) X86 Encoder Decoder detailed format which lists all resources read and written.
| const UINT32 VSYSCALL_NR = 0xABCDDCBA |
This file contains INS primitives
system call number for function called from vsyscall