Пин: вставьте две разные инструкции по одному адресу - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу изменить функцию, вставленную во время перед инструкцией с тем же адресом.

Что мне делать?

Например.

int count=10;
void insert_check_code(INS ins){
    if(INS_Address(ins) == tmpaddr)
        if(count > 5){
        INS_InsertCall(ins,IPOINT_BEFORE,count--func)
    }else  {
        INS_InsertCall(ins,IPOINT_BEFORE,count_printfunc)
    }


}

В приведенном выше примере значение счетчика возвращается к своему первоначальному значению. Я хочу изменить функцию, вставленную в момент времени перед инструкцией с тем же адресом.

Что мне делать?

Для,пример.

int count=10;
void insert_check_code(INS ins){
    if(INS_Address(ins) == tmpaddr)
        if(count > 5){
        INS_InsertCall(ins,IPOINT_BEFORE,count--func)
    }else  {
        INS_InsertCall(ins,IPOINT_BEFORE,count_printfunc)
    }


}

В приведенном выше примере значение Count возвращается к своему исходному значению.

Целевая программа - это простая серверная программа, поэтому мы используем функцию fork ().Необходимо ли написать специальное описание в Pintool для программы, использующей функцию fork ()? Значение.

1 Ответ

0 голосов
/ 16 декабря 2018

Переместите код if-else в его собственную функцию и вставьте вместо него эту функцию:

void conditional_func() {
   if(count > 5){
      count_decrement_func()
   } else  {
      count_printfunc()
   }
}

void insert_check_code(INS ins) {
    INS_InsertCall(ins,IPOINT_BEFORE,conditional_func)
}

Относительно fork(), это зависит от того, какое поведение вы хотите, когда fork() ing.

Имейте в виду, что если приложение является многопоточным, count доступ должен быть синхронизирован.

...