Abrufen des ursprünglichen Befehlsaufrufs von /proc/self

Abrufen des ursprünglichen Befehlsaufrufs von /proc/self

Ich versuche, über den dynamischen Linker in allen Prozessen Startcode auszuführen.

Der Code sollte Dinge basierend auf dem nullten Argument des Prozesses tun. Ich erhalte die Argumente von /proc/self/cmdline(wenn Sie einen besseren Weg kennen, außerhalb von main darauf zuzugreifen, sagen Sie es mir bitte), allerdings gibt es dabei ein Problem:

Skripte bekommen ihren Shebang (ohne #!) als nulltes Argument und in diesem Fall interessiert mich das nächste Argument. Aber wie kann ich interpretierte Prozesse von nativen unterscheiden?

Antwort1

Die Details, die Sie extrahieren, /proc/self/statusfinden Sie in /proc/self/comm(ohne Skripting).

Für die Fragestellung: Festzustellen, welche Prozesseinterpretiertund welche sindeinheimisch, können Sie dies nicht tun, ohne zu wissen, welche ProzesseDolmetscher. Schließlich kann sich jeder Prozess durch einen execAufruf selbst umbenennen und dabei beliebige Argumente für die Argumentliste des resultierenden Prozesses verwenden. Sie könntenerratendurch Vergleichen /proc/self/exe(das auf die ausführbare Datei verweist) mit der Argumentliste, aber das wäre nur eine Vermutung, da es Beispiele gibt, bei denen ein Nicht-Interpreter seine Nachkommen umbenennt, nur um ihre Verwendung deutlicher zu machen.

Weiterführende Literatur:

Antwort2

Es scheint, dass Prozesse Namein

</proc/self/status |grep '^Name'

basenameund der Name scheint der des echten nullten Arguments zu sein .

(Ich lasse die Frage hier, für den Fall, dass jemand eine bessere Antwort gibt).

verwandte Informationen