Desidero scrivere un passaggio LLVM allo strumento per ogni accesso alla memoria. Ecco cosa sto cercando di fare.Strumentazione del codice C/C++ utilizzando LLVM
Dato un qualsiasi programma C/C++ (come quello indicato di seguito), sto provando ad inserire chiamate ad alcune funzioni, prima e dopo ogni istruzione che legge/scrive dalla/dalla memoria. Ad esempio si consideri il seguente programma C++ (Account.cpp)
#include <stdio.h>
class Account {
int balance;
public:
Account(int b)
{
balance = b;
}
~Account(){ }
int read()
{
int r;
r = balance;
return r;
}
void deposit(int n)
{
balance = balance + n;
}
void withdraw(int n)
{
int r = read();
balance = r - n;
}
};
int main()
{
Account* a = new Account(10);
a->deposit(1);
a->withdraw(2);
delete a;
}
Così, dopo la strumentazione mio programma dovrebbe essere simile:
#include <stdio.h>
class Account
{
int balance;
public:
Account(int b)
{
balance = b;
}
~Account(){ }
int read()
{
int r;
foo();
r = balance;
foo();
return r;
}
void deposit(int n)
{
foo();
balance = balance + n;
foo();
}
void withdraw(int n)
{
foo();
int r = read();
foo();
foo();
balance = r - n;
foo();
}
};
int main()
{
Account* a = new Account(10);
a->deposit(1);
a->withdraw(2);
delete a;
}
dove foo() può essere qualsiasi funzione come ottenere l'ora di sistema corrente o incrementare un contatore .. così via.
Si prega di darmi esempi (codice sorgente, tutorial ecc.) E passaggi su come eseguirlo. Ho letto il tutorial su come rendere un LLVM Pass dato su http://llvm.org/docs/WritingAnLLVMPass.html, ma non sono riuscito a capire come scrivere un passaggio per il problema precedente.
Bene, è possibile sovraccaricare l'operatore non solo per eseguire le funzioni di addizione, sottrazione, assegnazione, ma anche per chiamare la funzione personalizzata. – vishakvkt
Perché vuoi aggiungere queste funzioni? Se si desidera eseguire il debug del programma, sono disponibili metodi migliori. – tune2fs
Stavo per votare per chiudere questa domanda come duplicato di http: // StackOverflow.it/questions/7526550/instrumenting-c-c-codes-using-llvm (Voglio dire, guarda i titoli) e ho notato che eri l'autore di entrambi. Come ti aspetti che gli utenti di StackOverflow ti diano risposte questa volta che non ti hanno dato l'ultima volta (a meno di farlo per te, cosa che non succederà)? –