英特尔 PIN:InsertPredicatedCall 和 INS_InsertCall
逆向工程
部件
x86
仪器仪表
小工具
2021-07-09 04:28:32
1个回答
你是对的,我们应该在你的情况下使用INS_InsertPredicatedCall
而不是INS_InsertCall
。区分一个和另一个非常直观,请考虑以下代码
cond:
xor eax, eax
mov edx, 0x1
cmp word [esp + 0x4], 0x5
cmovz eax, edx
ret
谁的C
代码很喜欢
int cond(int input)
{
return input == 0x5 ? 1 : 0;
}
如果您使用INS_InsertCall
跟踪执行的指令cond(input)
,那么对于任何价值的input
,你观察总是跟踪:
xor eax, eax
mov edx, 0x1
cmp word [esp + 0x4], 0x5
cmovz eax, edx
ret
但是如果你使用INS_InsertPredicateCall
, 那么 for input != 0x5
,你只会观察到:
xor eax, eax
mov edx, 0x1
cmp word [esp + 0x4], 0x5
ret
由于cmovz
是谓词指令,因此仅当 时才执行ZF = 1
。
其它你可能感兴趣的问题