Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Sobre execv

Estas en el tema de Sobre execv en el foro de C/C++ en Foros del Web. Alguna razon para que no me funcione execv? execv("prog.exe",argv); , deberia abrirse el prog.exe con los argumentos no? Pues no me abre el prog.exe, alguna ...
  #1 (permalink)  
Antiguo 24/09/2006, 18:52
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Sobre execv

Alguna razon para que no me funcione execv?
execv("prog.exe",argv); , deberia abrirse el prog.exe con los argumentos no? Pues no me abre el prog.exe, alguna idea??
Saludos.
  #2 (permalink)  
Antiguo 25/09/2006, 07:14
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
Alguna razon para que no me funcione execv?
execv("prog.exe",argv); , deberia abrirse el prog.exe con los argumentos no? Pues no me abre el prog.exe, alguna idea??
Saludos.
xDDDD

execv es una función estándar POSIX (es decir, que debe llevar cualquier sistema operativo UNIX-compatible, como Linux).

Vamos, que en Windows no la tienes de por si (si no me equivoco).
  #3 (permalink)  
Antiguo 25/09/2006, 09:27
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Ahmm, vale, xD, pues que raro, porque el manual que ponia el uso de esa funcion, estaba dedicado a programacion en windows... Hay alguna funcion similar para win??
  #4 (permalink)  
Antiguo 26/09/2006, 11:33
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Bueno, exactamente similar no son son, pero puedes guiarte por algunas como:

system() - estándar ANSI-C
CreateProcess()
WinExec()
ShellExecute()
...
  #5 (permalink)  
Antiguo 26/09/2006, 17:11
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Pero sirven para pasar parametros tb, que funcion sirve para esto y como la utilizo?
EJ :
parametros[]="loquesea";
lafuncion(programa.exe,parametros);
Es decir, sin ponerlos directamente detras del programa, sino en forma de variable. Para por ej, pasar valores asi :" \x43\x29\x3c", en hexadecimal, q no halla caracteres ascii para esos valores..
  #6 (permalink)  
Antiguo 27/09/2006, 07:11
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
Pero sirven para pasar parametros tb, que funcion sirve para esto y como la utilizo?
EJ :
parametros[]="loquesea";
lafuncion(programa.exe,parametros);
Es decir, sin ponerlos directamente detras del programa, sino en forma de variable. Para por ej, pasar valores asi :" \x43\x29\x3c", en hexadecimal, q no halla caracteres ascii para esos valores..
No sé si lo habrá, pero... ¿Tanto te cuesta juntarlos a ti en una sóla cadena? xD

En cualquier caso busca _tú_ en la API ;)
  #7 (permalink)  
Antiguo 27/09/2006, 09:05
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Cita:
No sé si lo habrá, pero... ¿Tanto te cuesta juntarlos a ti en una sóla cadena? xD
No veo otra manera, de pasar una cadena hexadecimal ( instrucciones ASM convertidas a hex.), como parametro a un programa, a no ser que conviertas todos los valores hex. a ascii, y los pongas tal cual, pero es bastante pesado, y ademas no estan todos los caracteres... En fin buscaré a ver si encuentro algo, gracias de todos modos.
  #8 (permalink)  
Antiguo 27/09/2006, 09:56
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
No veo otra manera, de pasar una cadena hexadecimal ( instrucciones ASM convertidas a hex.), como parametro a un programa, a no ser que conviertas todos los valores hex. a ascii, y los pongas tal cual, pero es bastante pesado, y ademas no estan todos los caracteres... En fin buscaré a ver si encuentro algo, gracias de todos modos.
¿Pero cuál es el problema?

Una cadena son bytes, igual que tus instrucciones ASM, igual que una imagen BMP, igual que ...

Cópialos con un simple for. Las "cadenas" son cadenas porque se cogen los bytes y se leen según el estándar ASCII, pero aparte de eso, son bytes.
  #9 (permalink)  
Antiguo 27/09/2006, 16:48
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
A ver ayudame a abrir el fichero con los parametros:

[headers]

char parametros[]="\x43\x5f\x12\xdd\x83\xef\x2f "; // codigo en ASM (xor eax,eax, mov
// eax,ebx) (me lo invento) transformado
// a opcodes en hex

//utilizo una funcion, nose si esta vale...

system("archivo.exe parametros");

Esto equivaldria a poner en la linea de cmds :
C:\> "archivo.exe parametros" ?? me da que no ...
(parametros = \x43\x5f\x12\xdd\x83\xef\x2f transformado a asccii)
No entiendo a que te refieres con lo del for, nose que tiene que ver aqui...
  #10 (permalink)  
Antiguo 28/09/2006, 07:04
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
A ver ayudame a abrir el fichero con los parametros:

[headers]

char parametros[]="\x43\x5f\x12\xdd\x83\xef\x2f "; // codigo en ASM (xor eax,eax, mov
// eax,ebx) (me lo invento) transformado
// a opcodes en hex

//utilizo una funcion, nose si esta vale...

system("archivo.exe parametros");

Esto equivaldria a poner en la linea de cmds :
C:\> "archivo.exe parametros" ?? me da que no ...
(parametros = \x43\x5f\x12\xdd\x83\xef\x2f transformado a asccii)
No entiendo a que te refieres con lo del for, nose que tiene que ver aqui...
A ver, algo así:

strcpy(resultado,"archivo.exe ");
for(int i=0;i<sizeof(parametros);++i) resultado[i+strlen("archivo.exe ")]=parametros[i];
  #11 (permalink)  
Antiguo 28/09/2006, 11:58
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
No me invitaron, pero bueno:

tu intencion es meter los opcodes en una cadena junto al programa que los recibe como parametros, y llamar a system con esta cadena.

para esto estan las funciones de stdio.h
especialmente(en este caso) sprintf y sscanf, con susrespectivos indicadores de formato.

ejemplo:

char strparam[80];

ssprintf(strparam, "%s %x %x %x %x %x", "programas.exe", 0x23,0x43,0x12,0x76, 0x45);

justo despues de esta centencia, tendras;

strparam = "programa.exe 0x23 0x43 0x12 0x76 0x45";

system(strparam);

los valores son arbitrarios, pero esta es una sugerencia de lo que puedes hacer para componer tu cadena parametro.

para sacar (leer), las variables respectivas, esta sscanf muy similar.

Saludos.
  #12 (permalink)  
Antiguo 28/09/2006, 14:09
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por Nivel7 Ver Mensaje
No me invitaron, pero bueno:

tu intencion es meter los opcodes en una cadena junto al programa que los recibe como parametros, y llamar a system con esta cadena.

para esto estan las funciones de stdio.h
especialmente(en este caso) sprintf y sscanf, con susrespectivos indicadores de formato.

ejemplo:

char strparam[80];

ssprintf(strparam, "%s %x %x %x %x %x", "programas.exe", 0x23,0x43,0x12,0x76, 0x45);

justo despues de esta centencia, tendras;

strparam = "programa.exe 0x23 0x43 0x12 0x76 0x45";

system(strparam);

los valores son arbitrarios, pero esta es una sugerencia de lo que puedes hacer para componer tu cadena parametro.

para sacar (leer), las variables respectivas, esta sscanf muy similar.

Saludos.
Yo había entendido que quiere pasar los opcodes tal cual, no convertirlos a una cadena como "hola 0x04 0x05".

¿?
  #13 (permalink)  
Antiguo 29/09/2006, 09:49
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
Quiero pasar lso opcodes tal cual, a la pila del ejecutable, es decir al buffer reservado para los parametros. De manera que en ese buffer, se guarden instrucciones en ASM, y que luego, si cambias la posicion del eip hacia el buffer donde comienza las intrucciones ASM que metiste como parametros, se ejecuten el codigo ASM. El problema de meterlo directamente, esque la shell lee los parametros segun el estandar ascii, por lo que no puedo meter opcodes en hexadecimal.
  #14 (permalink)  
Antiguo 29/09/2006, 10:38
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
Quiero pasar lso opcodes tal cual, a la pila del ejecutable, es decir al buffer reservado para los parametros. De manera que en ese buffer, se guarden instrucciones en ASM, y que luego, si cambias la posicion del eip hacia el buffer donde comienza las intrucciones ASM que metiste como parametros, se ejecuten el codigo ASM. El problema de meterlo directamente, esque la shell lee los parametros segun el estandar ascii, por lo que no puedo meter opcodes en hexadecimal.
No se si los leerá o no, pero lo que es seguro es que ese uso no es normal.

¿No tienes otra manera de hacerlo?

Yo creo que lo más sencillo (para programarlo y para usarlo) es pasarle como parámetro la ruta de un fichero, donde esté metido lo que te de la real gana.

Lees la ruta leyendo argv[1], la abres con fopen(), creas un buffer temporal con malloc(), copias el contenido del fichero al buffer, y ejecutas el buffer.

Última edición por MaxExtreme; 01/10/2006 a las 12:57
  #15 (permalink)  
Antiguo 01/10/2006, 09:20
 
Fecha de Ingreso: julio-2006
Mensajes: 99
Antigüedad: 17 años, 9 meses
Puntos: 0
ok, probare con lo del fichero, gracias. Ahm y que te valla bien con lo del concurso, xD.
  #16 (permalink)  
Antiguo 01/10/2006, 12:58
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por N0vat0 Ver Mensaje
ok, probare con lo del fichero, gracias. Ahm y que te valla bien con lo del concurso, xD.
Soy el árbitro, era para inventarme un problema.

¡Participa! Al lado tienes el mensaje: "Concurso Casero de C".
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:40.