Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment