Ich habe eine LLVM-Bitcode-Datei und ich führe einen Loop-Durchlauf auf es. Jedes Mal, wenn ich zu einer Schleife komme ("runOnLoop"), extrahiere ich mehrere Informationen über den Schleifenkörper (d. H. Die Anzahl der Anweisungen im Körper) und drucke sie aus. Ich brauche jedoch eine Möglichkeit, diese Information mit einer bestimmten Schleife zu verknüpfen - mit anderen Worten, ich muss den "Namen" der Schleife drucken, aus der die Information extrahiert wurde.Wie identifiziere ich eine Schleife in LLVM-Bitcode?
Antwort
Ich bin mir nicht sicher, was Sie mit "Name" meinen, aber eine Möglichkeit besteht darin, Debugging-Informationen (Zeilennummer/Spalte) zu drucken, die dem Loop-Latch-Block oder etwas Ähnlichem zugeordnet sind.
Eine andere Möglichkeit besteht darin, Metadaten zu verwenden, um jede Schleife eindeutig zu identifizieren und die extrahierten Informationen mit dieser Kennung zu verknüpfen.
Ich hatte eine ähnliche Notwendigkeit, also habe ich eine pass dafür erstellt. Beachten Sie, dass dieser Ansatz empfindlich auf Compileroptimierungen reagiert und die ID nicht beibehält, wenn dies geschieht (z. B. wenn eine Funktion, die eine Schleife enthält, inline ist). Für beste Ergebnisse (näher an der Quelle) verwenden Sie es über IR, die mit -O0
kompiliert wurde. Darüber hinaus können Optimierungen anschließend angewendet werden, wenn Sie Ihre Informationsbeschaffung abgeschlossen haben.
Allerdings, für etwas einfaches, würde ich mit dem ersten Ansatz gehen.
- 1. Wie identifiziere ich Anfragen?
- 2. Wie identifiziere ich Überlappungsnummernbereiche?
- 3. Wie identifiziere ich eine Gesundheitscheck-Anfrage?
- 4. Wie identifiziere ich eine Datenbank in MySql eindeutig?
- 5. Wie identifiziere ich eine leere uniqueidentifier in SQL Server 2005?
- 6. Wie identifiziere ich eine farbige Zeichenfolge in einem Array?
- 7. Wie identifiziere ich jedes neue Browserfenster/-fenster?
- 8. Reverse Engineering: Wie identifiziere ich eine unbekannte Komprimierungsmethode?
- 9. Wie identifiziere ich Stoppwörter mit BigQuery?
- 10. Wie identifiziere ich einen Benutzer auf iOS?
- 11. Wie identifiziere ich die PrimeFaces Tooltip Hintergrundfarbe?
- 12. Wie identifiziere ich einen Knoten als Wurzelknoten?
- 13. Wie identifiziere ich das Nuget Metapaket?
- 14. Wie identifiziere ich und fülle ich Konturen in javacv?
- 15. Wie identifiziere ich die Stimme in Befehl trigger
- 16. Wie identifiziere ich einen terminierenden Pod in kubernetes mit Java
- 17. Wie identifiziere ich welche Zweige in CVS existieren?
- 18. Wie identifiziere ich jede Aufgabe in javafx eindeutig?
- 19. Wie identifiziere ich Folgen von Werten in einem booleschen Array?
- 20. Wie identifiziere ich nicht verbundene Geschwister in einem Graphen?
- 21. Wie identifiziere ich unbekannte Personen in der Gesichtserkennung von Videos?
- 22. Wie identifiziere ich den gewählten Selektor in jQuery?
- 23. Identifiziere eine neue Nummer im ungeordneten Strom
- 24. Wie verlasse ich eine Schleife?
- 25. Wie identifiziere ich einen String als Byte-Literal?
- 26. Wie mache ich eine Schleife in Assembler?
- 27. Wie konstruiere ich eine Schleife in ATS?
- 28. Wie baue ich eine Schleife in JavaScript?
- 29. Backbone.js: Wie identifiziere ich das Modell der Elternansicht eines Ereignisses?
- 30. Wie identifiziere ich die @ user.id mit Restful Authentication?