Frage

Ich bin der Umsetzung eines Anrufs Graph-Programm für eine C Perl-Skript verwenden. Ich frage mich, wie zu lösen Anruf Graphen für Funktionszeiger Ausgabe von ‚objdump‘ verwenden? Wie verschiedene Aufrufgraphen Anwendungen resolve Funktionszeiger? Sind Funktionszeiger aufgelöst während der Laufzeit oder sie kann statisch erfolgen?

Bearbeiten Wie nennt Graphen resolve Zyklen in statischer Auswertung von Programm?

War es hilfreich?

Lösung

Es ist leicht, einen Anruf Graph von A-Anrufen-B zu bauen, wenn der Anruf Anweisung B. explizit erwähnt Es ist viel schwieriger indirekte Anrufe zu handhaben, wie Sie bemerkt haben.

Gut statische Analyse-Tools bilden Schätzungen des Inhalts von Zeigervariablen durch Ausbreiten Zeigerzuweisungen / Kopien / Arithmetik über Programmdatenströme (inter und intraverfahrens [ „global“]) mit einer Vielzahl von Systeme, die oft konservativ ( "Sie bekommen zu viel").

Ohne eine solche Schätzung, können Sie keine Ahnung, was ein Zeiger enthält und daher kann nicht einfach eine nützliche Vorhersage machen (na ja, können Sie die ultimative konservative Schätzung verwenden, dass es überall gehen, aber ich glaube, du hast bereits abgelehnt, Lösung).

DMS Software Reengineering Toolkit statische Kontrolle / Datenfluß / Punkte-to / Call Graphanalyse, die auf große Systeme angewendet wurde (~~ 25 Millionen Zeilen ) von C-Code, und eine solche Anruf Graphen erzeugt. Die Maschinen, dies zu tun ziemlich komplex ist, aber Sie es in fortgeschrittenen Themen in der Compiler Literatur finden. Ich bezweifle, dass Sie dies in Perl implementieren möchten.

Dies ist einfacher, wenn Sie den Quellcode haben, weil Sie zumindest sicher wissen, was Code ist, und was nicht. Sie versuchen, diesen Code auf dem Objekt zu tun, was bedeutet, dass Sie nicht einmal Daten beseitigen können.

Andere Tipps

Funktionszeiger ist ein Weg, die eigentliche Funktion der Wahl zur Laufzeit nennen, so dass im Allgemeinen, ist es nicht möglich wäre, zu wissen, was eigentlich statisch geschehen würde.

Sie können jedoch auf alle Funktionen sehen, die möglich sind zu nennen und vielleicht diejenigen, die in irgendeiner Weise zeigen. Oft haben die Rückrufe eine einzigartige genug Unterschrift (nicht immer).

Wenn Sie es besser machen wollen, müssen Sie den Quellcode analysieren, um zu sehen, welche Funktionen zugeordnet sind Zeiger zu beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top