Ich habe eine C-Binärdatei (Quellcode verfügbar) und eine vordefinierte Auslastung. Ich möchte alle Funktionsaufrufe und ihre jeweiligen Parameter sowie den Rückgabewert in Abrufreihenfolge protokollieren. Zum Beispiel in dem unten stehenden Code:Protokollieren Sie alle Parameterwerte von jedem C-Funktionsaufruf
int myfunc(int value){
return value*2;
}
int main(void){
int i;
i = myfunc(10);
i = myfunc(12);
i = myfunc(20);
return 0;
}
Es shoud in einer Log-Datei wie folgt ergeben:
int main()
int myfunc(10)
myfunc return 20
int myfunc(12)
myfunc return 24
int myfunc(21)
myfunc return 42
main return 0
Ich habe bereits versucht Intel PIN zu verwenden, es zu tun, und es funktioniert sehr gut , außer wenn die Variable ein Zeiger, ein Array, eine Struktur oder ein Typdef ist. Ich brauche alle Variablen.
Ich habe den Quellcode und ich kann es mit Debug-Optionen kompilieren.
Irgendwelche Ideen?
P.S. manuell zu debuggen, ist nicht durchführbar, da meine tatsächliche Arbeitslast etwa 5000 Aufrufe von 90 verschiedenen Funktionen hat.
Edit: OS ist Arch Linux 64bit
Eine Option ist [Systemtap] (https://sourceware.org/systemtap/). Sie haben Ihr Betriebssystem nicht angegeben, aber Systemtap ist für Linux. – kaylum
Tks @ kaylum, Ich werde Systemtap versuchen und hier posten, wenn es funktioniert. – William