c++ - What is Pc Materialization? -


i working tool called binary instrumentation called intel pin. encountered strange terminology while examining part of examples pin comes with. here relevant part:

void calltrace(trace trace, ins ins) {     if (!knobtracecalls)         return;      if (ins_iscall(ins) && !ins_isdirectbranchorcall(ins))     {         // indirect call         string s = "call " + formataddress(ins_address(ins), trace_rtn(trace));         s += " -> ";          ins_insertcall(ins, ipoint_before, afunptr(emitindirectcall), iarg_thread_id,                        iarg_ptr, new string(s), iarg_branch_target_addr,                        iarg_g_arg0_caller, iarg_g_arg1_caller, iarg_end);     }     else if (ins_isdirectbranchorcall(ins))     {         // tail call?         rtn sourcertn = trace_rtn(trace);         rtn destrtn = rtn_findbyaddress(ins_directbranchorcalltargetaddress(ins));          if (ins_iscall(ins)         // conventional call             || sourcertn != destrtn // tail call         )         {             bool tailcall = !ins_iscall(ins);              string s = "";             if (tailcall)             {                 s += "tailcall ";             }             else             {                 if( ins_isprocedurecall(ins) )                     s += "call ";                 else                 {                     s += "pcmaterialization ";                     tailcall=1;                 }              }              //s += ins_mnemonic(ins) + " ";              s += formataddress(ins_address(ins), trace_rtn(trace));             s += " -> ";              addrint target = ins_directbranchorcalltargetaddress(ins);              s += formataddress(target, rtn_findbyaddress(target));              ins_insertcall(ins, ipoint_before, afunptr(emitdirectcall),                            iarg_thread_id, iarg_ptr, new string(s), iarg_bool, tailcall,                            iarg_g_arg0_caller, iarg_g_arg1_caller, iarg_end);         }     }     else if (ins_isret(ins))     {         rtn rtn =  trace_rtn(trace);  #if defined(target_linux) && defined(target_ia32) //        if( rtn_name(rtn) ==  "_dl_debug_state") return;         if( rtn_valid(rtn) && rtn_name(rtn) ==  "_dl_runtime_resolve") return; #endif         string tracestring = "return " + formataddress(ins_address(ins), rtn);         ins_insertcall(ins, ipoint_before, afunptr(emitreturn),                        iarg_thread_id, iarg_ptr, new string(tracestring), iarg_g_result0, iarg_end);     } } 

this method determines instruction doing (direct call, indirect call, tail call, return , unknown pc materialization).

here full code.

so mean @ all? tried googling - no relevant results.

bool level_core::ins_ispcmaterialization ( ins ins )

returns: true if call next instruction, idiom materializing instruction pointer

check it


Comments

Popular posts from this blog

blackberry 10 - how to add multiple markers on the google map just by url? -

php - guestbook returning database data to flash -

delphi - Dynamic file type icon -