Ich möchte ein Frama-C-Plugin entwickeln, wo ich die Werte der aktuellen Aussage bekomme.Frama-C: Die Werte der Aussage
Mit Hilfe dieses Beitrags Frama-C Plugin development: Getting result of value-analysis war ich in der Lage, die Werte der Anweisungen zu drucken, aber Pointer wurden nicht so gezeigt, wie ich es brauche.
Mit Hilfe der Kommentare konnte ich den gesamten Zustand (nicht nur die Variablen der Anweisung) drucken.
Kann ich diese beiden kombinieren: Get die Variablen der Anweisung, aber auch mit den Dereferenzierten Zeigern (der Wert)?
Zum Beispiel das Drucken eines Nicht-Zeiger nach Aussage x=1
Ergebnisse in x -> {{ NULL -> {1} }}
, während ein Zeiger Druck nach einer Anweisung wie * x = 3, ergibt x -> {{ y -> {0} }}
, weil die 0 die der variablen versetzt ist, aber ich möchte Holen Sie sich den Wert, auf den der Zeiger zeigt, im Beispiel 3. So wie ich es möchte, wäre etwas so zu bekommen: x -> 3
.
Noch besser wäre es, ein Tupel von (String varname, int value)
zu bekommen, damit ich es selbst ausdrucken kann.
Was meinen Sie mit "Zeiger wurden nicht korrekt angezeigt"? Vielleicht sollten Sie Ihre Frage bearbeiten, um ein Beispiel hinzuzufügen, was Sie bekommen und was Sie sehen möchten. – Anne
Also, was Sie erhalten möchten, ist der Wert von '(* x)', nicht der Wert von '(x)'. Um zu wissen, ob eine Variable ein Zeiger ist, können Sie ihren Typ testen ('Cil.isPointerType vi.vtype'), und dann müssen Sie den lvalue' * x' (mit etwas wie 'Lval (Mem ..., NoOffset) ') und benutze es, um nach seinem Wert zu fragen. – Anne
Was ist der ... Teil? Einfach das Varinfo-Feld? Wie bekomme ich den Offset von der Varinfo? Wenn Sie einen Zeiger dereferenzieren, wird dies benötigt (oder habe ich nicht das bekommen, was Sie sagen wollen)? –