我正在尝试使用 Intel Pintool 来监控 x86-64 机器 (Mac Pro) 上的 CALL
和 RET
指令。我将 IARG_INST_PTR
(如下所述)传递给 docount
函数,并使用指令指针通过检查操作码(CALL
是 0xe8 并且 RET
是来自 Intel x86-64 manual 的 0xc3。但是,这个检查似乎并不完全准确,因为我注意到 RET
的数量比 CALL
对于使用此逻辑检测的任何给定二进制文件。
INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_CONTEXT,
IARG_INST_PTR, IARG_END);
谁能给我一些关于我做错了什么的指示?
我从/tools/ManualExamples/inscount0.cpp
借用了模板。要找到它,请搜索文件名 here .
最佳答案
call 和 ret 指令之间并不总是匹配,因为函数可能会被异常、类似 goto 的语句、longjumps、信号等打断……所以如果你想重新调和 calls 和 ret,你可能想要考虑所有这些。
这个已经讨论过好几次了,尤其是here
关于c++ - 使用 Intel Pin 时跟踪不匹配的 CALL 和 RET 指令数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29712225/