Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: XafiloX en 7 Noviembre 2010, 20:13 pm



Título: Ejecutar .exe desde C++
Publicado por: XafiloX en 7 Noviembre 2010, 20:13 pm
Hola a todos. Me gustaría saber cómo puedo hacer para ejecutar un exe desde C++ y obtener su salida para luego poderla tratar con mi programa.

¡Muchas gracias y un saludo!


Título: Re: Ejecutar .exe desde C++
Publicado por: madpitbull_99 en 7 Noviembre 2010, 20:59 pm
Si mal no me acuerdo se puede hacer con system() o con CreateProcess (http://support.microsoft.com/kb/175986), con system seria algo como :

Código
  1. system("C:\capeta\mi_programa.exe")

Corregidme si me equivoco.


Título: Re: Ejecutar .exe desde C++
Publicado por: Shell Root en 7 Noviembre 2010, 21:13 pm
Pero si mal no recuerdo debería ser así,
Código
  1. system("C:\\PoC\\capeta\\NOTAS.exe");

Pero no sé si se puede obtener el resultado, -como lo hace php-
obtener su salida para luego poderla tratar con mi programa.


Título: Re: Ejecutar .exe desde C++
Publicado por: XafiloX en 7 Noviembre 2010, 23:49 pm
Hola, gracias por responder.

He buscado ambas funciones y ninguna de las dos devuelve el resultado...system solamente devuelve 0, que significa que lo ha ejecutado con exito...

A ver si alguien conoce alguna función más...


Título: Re: Ejecutar .exe desde C++
Publicado por: BlackZeroX en 8 Noviembre 2010, 00:04 am
.
Interceptando las salidas del debug...

Dulces Lunas!¡.


Título: Re: Ejecutar .exe desde C++
Publicado por: XafiloX en 8 Noviembre 2010, 09:16 am
Como que el debug? Te refieres al debug que sirve para depurar los programas? Pero yo lo que quiero es un programa que llame a otro y realice ciertas operaciones sobre la salida del otro, cómo haría para llamar al debug y que me devuelva los resultados?


Título: Re: Ejecutar .exe desde C++
Publicado por: piou en 8 Noviembre 2010, 14:49 pm
Yo eso lo hacía redireccionando la salida a un archivo y leyendolo desde el programa, por ejemplo, este programa que ejecuta en linux el gcc y compila un archivo, y luego saca los errores, este justo es bastante inutil pero sirve como ejemplo:

Este es el programa:
Código:
#include <stdio.h>

int main(int argc, char *argv[])
{

system("gcc acompilar.c -o Main > archivo.txt 2>&1");
FILE *fichero;
    char letra;

    fichero = fopen("archivo.txt","r");
    if (fichero==NULL)
       {
       printf( "No se puede abrir el fichero.\n" );
       exit( 1 );
       }
    printf( "Contenido del fichero:\n" );
    letra=getc(fichero);
    while (feof(fichero)==0)
          {
          printf( "%c",letra );
          letra=getc(fichero);
          }
    if (fclose(fichero)!=0)
{
       printf( "Problemas al cerrar el fichero\n" );
    }

return 0;
}

Este es el archivo en C que le paso al gcc, con un fallo para que haya salida por stderr
Código:
#include <stdio.h>

int main(int argc, char *argv[])
{

printf(FALLOGARRAFAL);
return 0;
}

Si ejecutamos el programa se obtiene:
Código:
laptop:~$ ./a.out 
Contenido del fichero:
acompilar.c: In function ‘main’:
acompilar.c:6: error: ‘FALLOGARRAFAL’ undeclared (first use in this function)
acompilar.c:6: error: (Each undeclared identifier is reported only once
acompilar.c:6: error: for each function it appears in.)

Y efectivamente en el archivo archivo.txt tenemos los fallos que nos ha mostrado antes.
Código:
acompilar.c: In function ‘main’:
acompilar.c:6: error: ‘FALLOGARRAFAL’ undeclared (first use in this function)
acompilar.c:6: error: (Each undeclared identifier is reported only once
acompilar.c:6: error: for each function it appears in.)


Título: Re: Ejecutar .exe desde C++
Publicado por: MazarD en 8 Noviembre 2010, 15:17 pm

-CreatePipe
-CreateProcess
-En el startupinfo de createprocess asignas tu pipe a la salida estandar (hStdOutput)
-ReadFile sobre la pipe

Investiga sobre pipes, en google o la msdn seguro que hay mucha información al respecto

Saludos!


Título: Re: Ejecutar .exe desde C++
Publicado por: XafiloX en 8 Noviembre 2010, 17:57 pm
Ummm...he empezado a buscar sobre pipes y me estoy dando cuenta de que es un auténtico mundo por descubrir...Cuando consiga hacer el programilla os lo digo por aquí.

Un saludo y ¡¡muchísimas gracias por la ayuda!!