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.
| |||
Cita: xDDDDexecv 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). |
| |||
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.. |
| |||
Cita: 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. No sé si lo habrá, pero... ¿Tanto te cuesta juntarlos a ti en una sóla cadena? xD |
| |||
Cita: ¿Pero cuál es el problema?
Iniciado por N0vat0 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. 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. |
| |||
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... |
| |||
Cita: A ver, algo así:
Iniciado por N0vat0 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... strcpy(resultado,"archivo.exe "); for(int i=0;i<sizeof(parametros);++i) resultado[i+strlen("archivo.exe ")]=parametros[i]; |
| |||
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. |
| |||
Cita: Yo había entendido que quiere pasar los opcodes tal cual, no convertirlos a una cadena como "hola 0x04 0x05".
Iniciado por Nivel7 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. ¿? |
| |||
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. |
| |||
Cita: No se si los leerá o no, pero lo que es seguro es que ese uso no es normal.
Iniciado por N0vat0 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 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 |
| |||
Cita: Soy el árbitro, era para inventarme un problema.¡Participa! Al lado tienes el mensaje: "Concurso Casero de C". |