我们还使用
INS_InsertPredicatedCall
而不是INS_InsertCall
来避免生成对在
谓词为假,请参见此处。
如果要分析所有实际执行的指令,我应该选择哪两个?我不确定,因为我经常看到
INS_InsertPredicatedCall
。但是,为什么有人要使用它,即为什么有人要分析谓词为假的谓词?也许这两个函数如何导致不同结果的一个最小示例在这里会有所帮助...
#1 楼
您是正确的,在您的情况下,我们应该使用INS_InsertPredicatedCall
而不是INS_InsertCall
。区分彼此很直观,请考虑以下代码cond:
xor eax, eax
mov edx, 0x1
cmp word [esp + 0x4], 0x5
cmovz eax, edx
ret
C
代码有点像> 如果使用
INS_InsertCall
跟踪cond(input)
的已执行指令,那么对于input
的任何值,都将始终观察到跟踪: INS_InsertPredicateCall
,然后对于input != 0x5
,您将只能观察到: