Domanda

Io sono l'attuazione di un programma di grafo delle chiamate per un C utilizzando script perl. Mi chiedo come i grafici di chiamata per risolvere i puntatori a funzione utilizzando l'uscita di 'objdump'? Come diverso grafico delle chiamate puntatori a funzione applicazioni determinazione? Sono puntatori a funzione risolti in fase di esecuzione o che può essere fatto in modo statico?

Modifica Come fare grafici di chiamata cicli Resolve nella valutazione statica del programma?

È stato utile?

Soluzione

E 'facile costruire un grafico delle chiamate di A-chiamate-B quando l'istruzione chiamata menziona esplicitamente B. E' molto più difficile da gestire le chiamate indirette, come hai notato.

Buona strumenti di analisi statica formano stime il contenuto delle variabili puntatore propagando assegnazioni puntatore / copie / aritmetica tra i dati del programma flussi (inter e intra-procedurali [ "globale"]) utilizzando una varietà di schemi, spesso conservatore ( "si ottiene troppo").

Senza una tale stima, non si può avere alcuna idea di quello che un puntatore contiene e quindi semplicemente non può fare un utile previsione (o meglio, è possibile utilizzare l'ultima stima conservativa che andrà da nessuna parte, ma penso di aver già respinto tale soluzione).

La nostra DMS Software Reengineering Toolkit ha statico di controllo di flusso di dati / / punti-a / chiamata grafico di analisi che è stato applicato a sistemi enormi (~~ 25 milioni linee ) di codice C, e prodotti grafici tale chiamata. Il macchinario per fare questo è piuttosto complessa, ma si può trovare in argomenti avanzati nella letteratura compilatore. Dubito che si desidera implementare questo in Perl.

Questo è più facile quando si dispone il codice sorgente, perché non si sa, almeno in modo affidabile che cosa è il codice, e ciò che non lo è. Stai cercando di fare questo sul codice oggetto, il che significa che non si può nemmeno eliminare i dati.

Altri suggerimenti

Usando puntatori a funzione è un modo di scegliere la funzione reale di chiamare in fase di esecuzione, così, in generale, non sarebbe possibile sapere che cosa sarebbe realmente accadere in modo statico.

Tuttavia, si potrebbe guardare a tutte le funzioni che è possibile chiamare e forse mostrare quelli in qualche modo. Spesso i callback hanno una firma unica abbastanza (non sempre).

Se si vuole fare meglio, è necessario analizzare il codice sorgente, per vedere quali funzioni sono assegnate ai puntatori per cominciare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top