我正在尝试使用英特尔PIN模拟x86中的一些新指令。为此,我在示例C程序中创建了asm函数,该程序将作为可执行文件传递到PIN工具中。
例如,操作码0x17在x86-64中是非法的,因此我将使用该操作码来模拟我的新指令。 (在32位模式下它是pop ss
。)所以我在我的代码中使用了这样的东西 -
asm(".byte 0x17");
然而,当我使用PIN工具运行我的指令跟踪时,我在仪器指令中检测不到0x17。这是我正在使用的仪器功能 -
VOID Instruction(INS ins, void *v)
{
if(INS_Opcode(ins)==0x17)
{
INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_THREAD_ID, IARG_END);
INS_Delete(ins);
}
}
我在docount()
函数中执行我的分析,然后删除指令。
但是我根本没有发现非法指令。由于某些原因,我得到的指令与x86的指令不共享相同的操作码。
我正在编译x86_64上的所有东西,但仍然没有得到任何东西。我在哪里做错了什么?