配列のメモリ位置(実効アドレス)を印刷しようとしましたが、次のことがわかりました:
1- 最初の方法: (例として読み取り操作の場合)
IARG_MEMORYREAD_EA
を分析関数の引数として使用し、この関数内でこの値を出力します (メモリ読み取りの実効アドレス。INS_IsMemoryRead が true で IPOINT_BEFORE の場合にのみ有効です)。
2- 2 番目の方法: 挿入コールバックによる:
INS_OperandMemoryDisplacement(INS ins,UINT32 n)
INS_OperandMemoryBaseReg(INS ins,UINT32 n)
INS_OperandMemoryIndexReg(INS ins,UINT32 n)
INS_OperandMemoryScale(INS ins,UINT32 n)
メモリ内のアドレス指定に使用される変位、ベース レジスタ、インデックス レジスタ、およびスケール値を返します。オペランドを指定し、次の式で実効アドレスを計算します。
実効アドレス = Displacement + BaseReg + IndexReg * Scale
それらの違いは何ですか?それを達成するための最良の方法は何ですか?