führt einen Prozess mit argc = 0 aus

8

Ist es möglich, einen Prozess auszuführen, dessen argc = 0? Ich muss ein Programm ausführen, aber es ist extrem wichtig, dass sein argc gleich 0 ist. Gibt es einen Weg, das zu tun? Ich habe versucht, 2 ^ 32 Argumente in die Befehlszeile zu setzen, so dass es scheint, als ob argc = 0, aber es gibt eine maximale Grenze für die Anzahl der Argumente.

    
Keeto 13.11.2011, 18:46
quelle

3 Antworten

12

Sie können ein Programm schreiben, das exec direkt aufruft. Damit können Sie die Befehlszeilenargumente (einschließlich des Programmnamens) und deren Fehlen angeben.

    
ibid 13.11.2011, 19:00
quelle
3

Sie könnten ein C-Programm schreiben, das das andere Programm ohne argv startet / ausführt, wie:

%Vor%     
kennytm 13.11.2011 19:01
quelle
2

Sie können den Linux-Systemaufruf execve () verwenden.

%Vor%

Sie können den Dateinamen der ausführbaren Datei und einen Nullzeiger als argv [] übergeben, um die Binärdatei auszuführen, und der argc ist null .

Es ist mein Testcode:

%Vor%

Und das strace Ergebnis ist:

%Vor%

Sie können envp [] verwenden, um die von Ihnen definierten Argumente trotzdem zu übergeben.

Außerdem können Sie die Assemblersprache verwenden, um Ihr Ziel zu erreichen (argc == 0, aber Sie müssen immer noch Argumente übergeben). Ich nehme an, dass Sie eine 32-Bit-x86-Umgebung verwenden.

Das Konzept ist das:

  • Speichern Sie 0x0b ($ SYS_execve) in % eax
  • Setzen Sie die -Adresse von argv [] in % ebx
  • Geben Sie die -Adresse von envp [] in % ecx ein
  • Verwenden Sie dann int 0x80 , um einen Systemaufruf durchzuführen

Die Speicherstruktur ist unten gezeigt:

%Vor%

Ich frage mich, ob Sie die Laborarbeit von Prof. Taesoo Kim (GATech) machen würden. Kurslink: Ссылка

Oder ist es ein Hacker-CTF-Problem (catch-the-flag contest)?

    
vegafish 30.01.2017 03:39
quelle

Tags und Links