Эмуляция новой инструкции в Intel PIN
Я пытаюсь эмулировать некоторые новые инструкции в x86, используя Intel PIN. Для этого я создал функции asm в примере программы на C, который будет передаваться как исполняемый файл в инструмент PIN.
Например, код операции 0x17 недопустим в x86-64, поэтому я буду использовать этот код операции для имитации моей новой инструкции. (Это pop ss
в 32-битном режиме.) Так что я использую что-то вроде этого в моем коде
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, но все еще ничего не получаю. Где-нибудь я делаю что-то не так?