我正在编写一个Pin工具,我想检测具有特定操作码的指令。我有一个示例C程序的可执行文件,我正在打印hello world。使用的架构是x86_64,我在程序中有一些汇编指令。我将此程序的汇编指令跟踪提供给英特尔PIN工具,我正在运行指令跟踪并执行操作。
我的目标是从原始程序中检测特定的操作码。例如,我在我的C程序中添加了以下行 -
VOID Instruction(INS ins, VOID *v)
{
if(INS_Opcode(ins)==0x17)
{
//Do something
}
}
由于这个0x17是我的C程序跟踪中的指令。在我的英特尔PIN工具中,我有一个这样的指令跟踪 -
{{1}}
然而,当我运行指令跟踪时,由于我放置了非法指令0x17,我的Pin工具失败。
当我打印指令操作码时,我看到它们与x86_64的操作码不同。例如,当我打印时,指令AND具有操作码0x17。我是否必须进行某种解码,或者我是否以错误的方式检测到操作码?