老实说,Pin 混淆了我的直觉。让我们说,为了争论,我有一条线
a = b + c
然后我希望将 b 和 c 的地址存储为 a 的依赖项,例如,在地图中,
m[address of a].append(address of b, address of c)
我目前对此的理解包括
if (INS_IsMemoryRead(ins)||INS_IsMemoryWrite(ins))
for(memOp=0;memOp<INS_MemoryOperandCount(ins);memOp++)
INS_InsertPredicatedCall(ins, IPOINT_BEFORE, (AFUNPTR) AnalysisFunction, IARG_MEMORYOP_EA, memOp, IARG_THREAD_ID, IARG_END);
其中 AnalysisFunction 本质上将从操作中获取内存地址并以某种方式返回它,或将其放入映射中。但我不完全确定如何做到这一点,或者如何正确关联读取和写入。
任何帮助,将不胜感激