Какие регистры можно изменить с помощью PIN_GetContextReg и PIN_SetContextReg

Я хочу использовать PIN_GetContextReg, чтобы получить значение регистра, затем изменить его и вернуть обратно с помощью PIN_SetContextReg. В руководстве по PIN-коду сказано, что я могу сделать это с целочисленным регистром, но все регистры, которые я пробую, кроме REG_INST_PTR, выдают ошибку (регистр ** НЕ поддерживается для PIN_GetContextReg/PIN_SetContextReg)

Вот код

    UINT32 old_val;
    UINT32 new_val;
    old_val = PIN_GetContextReg(ctxt,   REG_EAX);       
    new_val = old_val ^ mask;
    PIN_SetContextReg(ctxt,  REG_EAX, new_val);         
    PIN_RemoveInstrumentation();
    PIN_ExecuteAt(ctxt);

В этом случае я пытаюсь с регистра EAX и я получаю ту же ошибку. Я использую Pin 3.0

0 ответов

Недавно я работал над подобной проблемой и получаю такую ​​же ошибку, как и вы.

Я думаю, что проблема, с которой мы оба столкнулись, заключалась в том, что в нашем компьютере есть аппаратный регистр RAX, и EAX - лишь его часть. Как вы можете видеть в последних строках в примере ниже

// change eax
PIN_SetContextReg(ctxtTo, REG_RAX,0xbaadf00d);

После исправления моя программа работает! Если вам нужен мой код для справки, не стесняйтесь спрашивать:) А скриншот ниже взят с https://studylib.net/doc/10207218/verdana-bold-30

Другие вопросы по тегам