קטע קוד PIN טיפוסי נראה כך (נלקח מתוך המדריך הרשמי):
// פונקציה זו נקראת לפני ביצוע כל הוראה // ו מדפיס את הדפוס IPVOID (VOID * ip) {fprintf (trace, "% p \ n", ip); } // Pin קורא לפונקציה זו בכל פעם שנתקלת בהוראה חדשה הוראת VOID (INS ins, VOID * v) {// הכניסו קריאה ל- printip לפני כל הוראה, והעבירו אותה ל- IP INS_InsertCall (ins, IPOINT_BEFORE, (AFUNPTR) printip , IARG_INST_PTR, IARG_END);}
אני פשוט לא מצליח להבין איך לגשת לאובייקט ins
מתוך printip (VOID * p) . להפך נראה קל, כלומר להשיג את ה- IP מאובייקט
ins
:
INS_Address (INS ins)
(ראה כאן)
ניסיתי להעביר מצביע INS * ins
ל printip (VOID * ip, INS * ins)
ins דרך IARG_PTR , &ins
אך זה הסתיים בשגיאות יציקה או בתקלות פילוח.
כיצד אוכל לגשת לאובייקט ins
(סוג INS
) בתוך פונקציית ניתוח?
הערת צד: הגעתי לבעיה זו כשניסיתי להתקשר ל INS_Disassemble (INS ins)
לכל הוראה שבוצעה.