Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: XKC en 27 Junio 2017, 14:18 pm



Título: cabeceras
Publicado por: XKC en 27 Junio 2017, 14:18 pm
Hola a todos, estoy mirando cosillas por github y tengo dudas con algunas cosas.
Os dejo el link:
https://github.com/graniet/fsociety-ransomware-MrRobot/tree/master/source
Alguien me puede explicar este fragmento de codigo?
Código:
#if defined(WIN32) || defined(_WIN32) || defined(__WIN32) && !defined(_CYGWIN_) //Por que tantas comprobaciones, no valdria solo defined(win32)??
    #define WIN32_WINNT 0x0500 // Para que es esto???
    #include <windows.h>
#endif
Despues en ciertos pasos dentro del codigo hace
Código:
/*
 * Estas comprobaciones las hace para poder compilar el codigo y ejecutarlo en una plataforma diferente a windows??
 * Si es asi en la linea 21 del main.cpp hace esto:
 *      char *folder = "/root/Bureau"; //¿es una ruta UNIX, no funcionara en windows?, me he perdido...
 */
#if defined(win32)
Hace alguna cosa..
#else
Otras funciones
#endif


Título: Re: cabeceras
Publicado por: MAFUS en 27 Junio 2017, 14:37 pm
Las primera comprobación es larga porqué debe preveer todas las distintas formas en que las APIs definen código para Windows y que no formen parte de Cygwin que recrea un entorno Linux dentro de windows.

El WIN32_WINNT es un símbolo para que las APIs activen, en durante la compilación condicional, ciertas funciones y tipos de datos.

Sobre la ruta que marcas sí, es una ruta *nix y no, no funciona con windows (pero sí bajo cygwin)

Lo último es la compilación condicional que compilará una cosa si está definido el símbolo win32 o el otro si no lo está (por ser otro S.O.)


Título: Re: cabeceras
Publicado por: XKC en 27 Junio 2017, 14:57 pm
Las primera comprobación es larga porqué debe preveer todas las distintas formas en que las APIs definen código para Windows y que no formen parte de Cygwin que recrea un entorno Linux dentro de windows.

El WIN32_WINNT es un símbolo para que las APIs activen, en durante la compilación condicional, ciertas funciones y tipos de datos.

Sobre la ruta que marcas sí, es una ruta *nix y no, no funciona con windows (pero sí bajo cygwin)

Lo último es la compilación condicional que compilará una cosa si está definido el símbolo win32 o el otro si no lo está (por ser otro S.O.)
osea, que este codigo esta reparado para compilarse bajo cualquier entorno.
¿Si solo quisieras utilizarlo sobre windows bastaria con omitir todas las comprobaciones de las API ?
Otra cosa, como funciona esto sobre entornos windows si la ruta es *nix?
Gracias por tu respuesta.