Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: XKC en 2 Enero 2016, 20:06 pm



Título: Programa en C
Publicado por: XKC en 2 Enero 2016, 20:06 pm
Hola buenas y gracias a todos por vuestro tiempo. Bien tengo una duda y es que programo en C desde ubuntu compilando con gcc, si quisiera hacer un programa que funcionara en windows que tendría que hacer?.Es que he oído por ahí que al crear un ejecutable debe funcionar en todos los equipos, pero a mi no me pasa. Como hacer un programa que funciones en diferentes equipos? Gracias.

Enviado desde mi Orange Hi 4G mediante Tapatalk


Título: Re: Programa en C
Publicado por: mester en 2 Enero 2016, 20:12 pm
Hola buenas y gracias a todos por vuestro tiempo. Bien tengo una duda y es que programo en C desde ubuntu compilando con gcc, si quisiera hacer un programa que funcionara en windows que tendría que hacer?.Es que he oído por ahí que al crear un ejecutable debe funcionar en todos los equipos, pero a mi no me pasa. Como hacer un programa que funciones en diferentes equipos? Gracias.

Enviado desde mi Orange Hi 4G mediante Tapatalk

http://stackoverflow.com/questions/1714245/difference-between-if-definedwin32-and-ifdefwin32
http://stackoverflow.com/questions/662084/whats-the-difference-between-the-win32-and-win32-defines-in-c
Un ejemplo de uso:
Código
  1. #if defined (__unix__)
  2.  #include <sys/time.h>
  3.  #include <sys/stat.h>
  4.  #include <sys/types.h>
  5.  #include <unistd.h>
  6. #elif defined (_WIN32)
  7.  #include <winsock2.h>
  8.  #include <conio.h>
  9.  #include <windows.h>
  10.  #include <winuser.h>
  11.  #include <winbase.h>
  12. #endif

No puedes hacer un ejecutable único a no ser que hablemos de java o lenguajes interpretados como Python, Perl, etc...
En el caso de C debes especificarle al compilador las opciones que tienes. En este ejemplo si compilas en Linux, GCC te compilará las librerías:
  #include <sys/time.h>
  #include <sys/stat.h>
  #include <sys/types.h>
  #include <unistd.h>
En el caso de que compiles en Windows, GCC compilará:
  #include <winsock2.h>
  #include <conio.h>
  #include <windows.h>
  #include <winuser.h>
  #include <winbase.h>
E ignorará las de Unix.

Como te he dicho, no puedes hacer un ejecutable único, pero sí que puedes hacer un programa que se pueda compilar en los dos sistemas sin fallos. Un buen ejemplo es el código de Netcat.


Título: Re:
Publicado por: XKC en 2 Enero 2016, 20:20 pm
Ostras muchisimas gracias, ahora lo entiendo..jejjej.
Es que lo del ejecutable lo lei en un tema de python y me lio. Los lenguajes interpretados son ejecutables en cualquier SO?

Enviado desde mi Orange Hi 4G mediante Tapatalk


Título: Re: Programa en C
Publicado por: MAFUS en 2 Enero 2016, 21:24 pm
Los lenguajes interpretados pasan por un interprete que es un programa compilado bajo cierta arquitectura y S.O., por eso, siempre que exista un interprete ese código funcionará.
En cambio en un programa compilado el código es específico de una arquitectura y S.O. Si llevas el programa a otro procesador que no sea compatible va a fallar por diferencias en el código máquina, aunque los dos corran el mismo S.O. Si compilas en para un mismo procesador, pero los S.O. son diferentes tampoco va a funcionar por las diferencias intrínsecas de los propios SS.OO. (llamadas al sistema, la forma en que se preparan las llamadas a las funciones y como se llaman,  estructuras internas, etc.)


Título: Re: Re: Programa en C
Publicado por: XKC en 4 Enero 2016, 14:31 pm
Los lenguajes interpretados pasan por un interprete que es un programa compilado bajo cierta arquitectura y S.O., por eso, siempre que exista un interprete ese código funcionará.
En cambio en un programa compilado el código es específico de una arquitectura y S.O. Si llevas el programa a otro procesador que no sea compatible va a fallar por diferencias en el código máquina, aunque los dos corran el mismo S.O. Si compilas en para un mismo procesador, pero los S.O. son diferentes tampoco va a funcionar por las diferencias intrínsecas de los propios SS.OO. (llamadas al sistema, la forma en que se preparan las llamadas a las funciones y como se llaman,  estructuras internas, etc.)
vale, muchas gracias ahora lo entiendo. Pero una ultima duda que tengo, entonces el malware que se desarrolla y se envia de manera masiva como consiguen que funcione en diferentes maquinas (en caso de que este creado en lenguajes compilados).Muchas gracias por su tiempo.Un saludo.


Título: Re: Programa en C
Publicado por: class_OpenGL en 4 Enero 2016, 14:43 pm
No soy un entendido en malware, pero creo que la principal forma de enviar virus de forma masiva es crearlos para Windows. Este sistema operativo es el más común en los ordenadores personales. Ahora bien, no sé si habrá más técnicas para distribuir también a otros sistemas operativos


Título: Re: Programa en C
Publicado por: MAFUS en 4 Enero 2016, 15:17 pm
Hay más cosas.

No todo es el sistema operativo y el tipo de máquina en sí.
También están las llamadas máquinas virtuales, como son la de Java, el JIT de .NET, etc. También están los entornos de ejecución como los navegadores con sus plugins (el navegador está compilado para cada plataforma a la que da soporte, pero los plugins son genéricos, eso es todos los navegadores de esa marca aceptarán ese plugin ); o un caso muy famoso el Flash y sus animaciones/banners/contenido activo.

Si hay un bug en estas máquinas virtuales (entiéndase todo lo anterior mencionado) que hace cosas que no debería hacer en el sistema anfitrión, ese bug, por lo general, estará en todas las plataformas a las que se puede instalar esa máquina virtual y un malware escrito para esa máquina virtual que explote ese bug puede comprometer y compromete la seguidad y el buen funcionamiento del sistema anfitrión.



Por cierto, sí se puede compilar desde una plataforma para otra. La técnica se llama cross-compiling. Para ello se utilizan los cross compilers que son capaces de compilar para otras arquitecturas. Hay muchos tipos: Linux a Windows y viceversa, Linux a Arduino, Windows a Arduino, L/W a uPIC, a Android, a iOS, etc. etc. etc.

Tal vez era esto lo que querías. Busca información de cross-compiling de Linux para Windows.


Título: Re: Re: Programa en C
Publicado por: XKC en 4 Enero 2016, 17:14 pm
Por cierto, sí se puede compilar desde una plataforma para otra. La técnica se llama cross-compiling. Para ello se utilizan los cross compilers que son capaces de compilar para otras arquitecturas. Hay muchos tipos: Linux a Windows y viceversa, Linux a Arduino, Windows a Arduino, L/W a uPIC, a Android, a iOS, etc. etc. etc.

Tal vez era esto lo que querías. Busca información de cross-compiling de Linux para Windows.
Muchas gracias, si algo así era lo que estaba buscando. Me habéis ayudado mucho, con gente como vosotros da gusto.Gracias.

Enviado desde mi Orange Hi 4G mediante Tapatalk