密码:在同一地址插入两个不同的指令

时间:2018-12-15 08:52:11

标签: intel-pin

我想更改在具有相同地址的指令之前的时间插入的功能。

我该怎么办?

例如。

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)
    }


}

在上面的示例中,计数值返回到其原始值。

目标程序是一个简单的服务器程序,因此我们正在使用fork()函数。 是否需要在Pintool中为使用fork()函数的程序编写特殊说明?值。

1 个答案:

答案 0 :(得分:0)

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()进行操作时想要的行为。

请记住,如果应用程序是多线程的,则count访问必须同步。