Lyxica icon

Intel Pin Memory Types

Lyxica | PRO | 09/01/20 03:35:56 AM UTC | 0 ⭐ | 264 👁️ | Never ⏰ | []
C++ |

1.24 KB

|

None

|

0 👍

/

0 👎

VOID InsertMemoryRecorder(INS ins, int operand)
{
    //assert(INS_OperandIsMemory(ins, operand));
 
    auto base = INS_OperandMemoryBaseReg(ins, operand);
 
    auto disp = INS_OperandMemoryDisplacement(ins, operand);
 
    auto index = INS_OperandMemoryIndexReg(ins, operand);
    auto scale = INS_OperandMemoryScale(ins, operand);
 
    if (!REG_valid(base)) // [0xf000]
    {
        INS_InsertThenCall(ins, IPOINT_BEFORE, (AFUNPTR)recordAccess,
            IARG_INST_PTR,
            IARG_ADDRINT, -1,
            IARG_ADDRINT, disp,
            IARG_ADDRINT, -1,
            IARG_ADDRINT, 0,
            IARG_END);
    }
    else if (REG_valid(index)) // [rax+rcx*8+disp]
    {
        INS_InsertThenCall(ins, IPOINT_BEFORE, (AFUNPTR)recordAccess,
            IARG_INST_PTR,
            IARG_REG_VALUE, base,
            IARG_ADDRINT, disp,
            IARG_REG_VALUE, index,
            IARG_ADDRINT, scale,
            IARG_END);
    }
    else // [rax+(disp/0)]
    {
        INS_InsertThenCall(ins, IPOINT_BEFORE, (AFUNPTR)recordAccess,
            IARG_INST_PTR,
            IARG_REG_VALUE, base,
            IARG_ADDRINT, disp,
            IARG_ADDRINT, -1,
            IARG_ADDRINT, 0,
            IARG_END);
    }
}

Comments