Warum gibt iosnoop (IO-Snooping-Dateien auf der Festplatte) Pfade mit Fragezeichen zurück?

8

Wenn ich renne

%Vor%

und dann in einem anderen Terminallauf

%Vor%

im iosnoop-Terminal sehe ich:

%Vor%

Was sind die Fragezeichen in der Nähe von ruby ​​im Pfad zu den Dateien behandelt:

%Vor%

? Und wie kann ich den absoluten Pfad für alle diese Dateien finden?

Zusätzliche Frage - warum sind die Fehler hier:

%Vor%

?

    
static 12.08.2013, 16:08
quelle

2 Antworten

9

Die kurzen Antworten sind:

  1. Das ?? signalisieren, dass der verbleibende Pfadname unbekannt ist,
  2. Sie können den absoluten Pfad und
  3. nicht extrahieren
  4. Dies ist eine Funktion, kein Fehler von DTrace unter OS X.

Eine Erklärung dieser Punkte erfordert etwas Vertrautheit mit DTrace; Beginnen Sie gegebenenfalls mit der Einführung in die Solaris-Version .

iosnoop ist ein Skript, das die DTrace-Beobachtbarkeit ausnutzt Rahmen. Insbesondere wird der io provider start verwendet. und done Sonden; Die Startsonde legt die bufinfo_t einer Anfrage offen. Das devinfo_t des Zielgeräts und die entsprechenden Dateien fileinfo_t . Der fileinfo_t ist kein nativer Darwin-Typ: Es ist eine Struktur, die von dtrace (1) zur Verfügung gestellt wird bequeme Abstraktion einer Datei zum Vorteil der Benutzer. Zum Beispiel ist unter seinen Mitgliedern fi_pathname , die sollte den vollständigen Pfadnamen einer Datei angeben.

Mit einer abstrahierten Beschreibung werden Benutzer und ihre Benutzer geschützt Skripte, aus Kenntnis und Änderungen des zugrunde liegenden Implementierung des Betriebssystems. In der Theorie erlaubt es auch a einzelnes Skript, das auf verschiedenen Betriebssystemen ausgeführt wird zusammen.

Ein fileinfo_t wird dynamisch erstellt und befüllt mit einem DTrace Übersetzer beschrieben in /usr/lib/dtrace/io.d . Dies zeigt die Transformation von den OS-spezifischen Typen zur Abstraktion. Im Falle von Snow Leopard sehe ich das fi_pathname wird aus der Zeichenfolge "?? /" gefolgt von einige Derivate des IO-Puffers. Ich bin kein Darwin-Experte, aber Ich folge daraus, dass es einfach keine vollständigen Pfadnamen in seinem Verzeichnis aufzeichnet vnodes. Dies ist also der Ursprung des "??" in der Ausgabe von deinem Drehbuch und auch der Grund, warum ich das Absolute vermute Pfadnamen sind nicht verfügbar.

Zum Schluss Ihre DTrace-Fehler. Aus welchen Gründen auch immer, Apple's Hafen von DTrace ist subtil verkrüppelt in dass es die Verfolgung ausschließt von verschiedenen Prozessen, und die Fehlermeldung, die Sie sehen, ist ein charakteristisches Symptom. Insbesondere geht es um die Beschwerde die Zeile

%Vor%

und es stellt sich heraus, dass (wieder, auf Snow Leopard), versucht zu bewerten uid auf einem der launchd , diskimages-help und kernel_task Prozesse führen genau zu diesem Fehler. Ich nehme an, dass diese Prozesse sind "außerhalb der Grenzen" und die Fehler, die Sie sehen, sind die Folgen von Apples Modifikationen.

    
Robert Harris 13.08.2013, 00:59
quelle
5

Während die obige Antwort einen guten technischen Hintergrund bietet, wenn Sie nur den vollständigen Pfadnamen der geöffneten Dateien erhalten wollen, kann ich dies mit rohen DTrace unter OS X über:

machen %Vor%

Dies zeigt an, dass die Datei geöffnet, aber nicht gelesen oder geschrieben wird. Ich habe das von Brendan Greggs praktischer DTrace One Liners Seite: Ссылка

Leider verstehe ich immer noch nicht, warum iosnoop nicht den vollen Pfad angibt, wenn es theoretisch möglich erscheint.

    
Anton I. Sipos 04.12.2013 23:35
quelle

Tags und Links