È possibile eseguire un processo di cui argc = 0? Ho bisogno di eseguire un programma ma è estremamente importante che il suo argc sia uguale a 0. C'è un modo per farlo? Ho provato a mettere 2^32 argomenti nella riga di comando in modo che appaia come se argc = 0 ma c'è un limite massimo al numero di argomenti.esecuzione di un processo con argc = 0
risposta
È possibile scrivere un programma che chiama direttamente exec; che ti permette di specificare gli argomenti della riga di comando (incluso il nome del programma) e la sua mancanza.
si potrebbe scrivere un programma C che genera/dirigenti l'altro programma senza argv, come:
#include <spawn.h>
#include <stdlib.h>
int main(int argc, char** argv, char** envp)
{
pid_t pid;
char* zero_argv[] = {NULL};
posix_spawn(&pid, "./that_app", NULL, NULL, zero_argv, envp);
int status;
waitpid(&pid, &status, NULL);
return 0;
}
Non sarebbe un comportamento indefinito? – user
@user: non proprio. Lo standard tratta 'argc' e' argv [0] == 0' come una situazione perfetta. Vedi [questa domanda] (http://stackoverflow.com/questions/2794150/when-can-argv0-have-null). –
È possibile utilizzare chiamata di sistema linux execve().
int execve(const char *filename, char *const argv[], char *const envp[]);
Si può passare il nome di eseguibile e un puntatore nullo come argv [] per eseguire il binario e l'argc sarà zero.
E 'il mio codice di prova:
#include <stdio.h>
#include <unistd.h>
int main(void) {
char *argv[]={ NULL };
execv("./target", argv);
return (0);
}
E il strace risultato è:
execve("./target", [], [/* 20 vars */]) = 0
si potrebbe usare envp [] per passare gli argomenti definiti in ogni modo.
Inoltre, è possibile utilizzare il linguaggio assembly per raggiungere l'obiettivo (argc == 0 ma è comunque necessario passare argomenti). Presumo che si stia utilizzando un ambiente x86 a 32 bit.
Il concetto è che:
- negozio 0x0b ($ SYS_execve) in % eax
- mettere l'indirizzo di argv [] in % ebx
- mettere il indirizzo di envp [] in % ecx
- quindi utilizzare int 0x80 di fare una chiamata di sistema
La struttura della memoria è la seguente:
+--------------------------------------------------+
| +----------------------------------|-----+
v v v------------------|-----|-----+
[arg_0][\0][...][arg_1][\0][...][arg_2][\0][...][ptr0][ptr1][ptr2][\0]
^
| (argv[] = NULL)
+--- envp
Mi chiedo che se si stesse facendo l'assegnazione di laboratorio del corso forniti dal Prof . Taesoo Kim (GATech). Link al corso: https://tc.gtisc.gatech.edu/cs6265
O è un problema di hacker CTF (catch-the-flag contest)?
Questo non fornisce una risposta alla domanda. Una volta che hai [reputazione] sufficiente (http://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (http://stackoverflow.com/help/privileges/comment); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla recensione] (/ recensione/post di bassa qualità/15041212) –
Risolto, grazie. – vegafish
- 1. argv [argc] ==?
- 2. Debug di un processo Python in esecuzione
- 3. indefinito argc variabile PHP
- 4. Come uccidere un processo Python in esecuzione?
- 5. Esecuzione hello.py da un processo Android
- 6. Python REPL per un processo in esecuzione
- 7. Nettante un processo Python in esecuzione?
- 8. Metodo esecuzione in un nuovo processo
- 9. Modifica della variabile di ambiente di un processo in esecuzione
- 10. Ottenere un percorso di un processo in esecuzione per nome
- 11. Ottenere il processo in esecuzione dato l'handle di processo
- 12. Errore: "processo 0 0" Symbol File non trovato in WinDbg
- 13. Ottieni lo stack backtrace di un processo in esecuzione
- 14. Ottenere l'output di un processo in fase di esecuzione
- 15. di Array indice e argc signedness
- 16. Come ottenere mach-o uuid di un processo in esecuzione?
- 17. Esecuzione di un comando come processo/servizio in background
- 18. 'main (int argc, char * argv [])'
- 19. forzare l'arresto di qualsiasi processo in esecuzione
- 20. Utilizzo di argc e argv in Eclipse?
- 21. Bash: Check up, eseguire un processo, se non in esecuzione
- 22. Cosa fa initialize_main (& argc, & argv)?
- 23. Come ottenere file aperti/usati di un processo in esecuzione
- 24. esecuzione di un comando batch tramite processo SSIS
- 25. Un processo cron uccide l'ultima esecuzione di cron?
- 26. Esecuzione di un'applicazione Java in un processo separato
- 27. Esecuzione di un processo o una filettatura separata in Qt
- 28. C#: reindirizzare l'output standard di un processo già in esecuzione
- 29. Avviare un processo come utente da un processo in esecuzione come amministratore
- 30. Processo Zombie anche se i thread sono ancora in esecuzione
cosa stai cercando di ottenere esattamente?Voglio dire, forse c'è un altro modo più semplice per farlo. – Aziz
Qual è il tuo sistema operativo e come stai eseguendo questo processo? È attivato dall'utente o stai chiamando da un altro processo? – ibid
Non puoi semplicemente impostare 'argc = 0' come prima riga di' main() '? –