![¿Cómo puedo ejecutar un programa con argv[0] modificado usando el shell ash de Busybox?](https://rvso.com/image/110476/%C2%BFC%C3%B3mo%20puedo%20ejecutar%20un%20programa%20con%20argv%5B0%5D%20modificado%20usando%20el%20shell%20ash%20de%20Busybox%3F.png)
En bash
simplemente usaría exec -a
. ¿Cómo puedo hacer esto en Busybox? ¿Es posible o tendré que escribir mi propio programa en C para llamarlo exec(3)
directamente?
Respuesta1
¿Qué versión de Busybox tienes? De acuerdo ahttps://git.busybox.net/busybox/tree/shell/ash.cSi uno profundiza, exec
puede encontrar alrededor de la línea 9352 aproximadamente el siguiente código que parece admitirexec [-a customname] ...
execcmd(int argc UNUSED_PARAM, char **argv)
{
optionarg = NULL;
while (nextopt("a:") != '\0')
/* nextopt() sets optionarg to "-a ARGV0" */;
argv = argptr;
if (argv[0]) {
char *prog;
iflag = 0; /* exit on error */
mflag = 0;
optschanged();
/* We should set up signals for "exec CMD"
* the same way as for "CMD" without "exec".
* But optschanged->setinteractive->setsignal
* still thought we are a root shell. Therefore, for example,
* SIGQUIT is still set to IGN. Fix it:
*/
shlvl++;
setsignal(SIGQUIT);
/*setsignal(SIGTERM); - unnecessary because of iflag=0 */
/*setsignal(SIGTSTP); - unnecessary because of mflag=0 */
/*setsignal(SIGTTOU); - unnecessary because of mflag=0 */
prog = argv[0];
if (optionarg)
argv[0] = optionarg;
shellexec(prog, argv, pathval(), 0);
Respuesta2
exec -a
es compatible desde Busybox 1.27, vea también las respuestas a¿Existe una forma POSIX de establecer el argumento cero de una aplicación de destino?para saber cómo lograrlo de otra manera.