• Viernes 29 de Marzo de 2024, 15:39

Autor Tema:  Error con cast.  (Leído 1993 veces)

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Error con cast.
« en: Jueves 3 de Febrero de 2011, 15:49 »
0
hola estoy intentando compilar esto con visual c++ 2008, me han comentado que con gcc compila perfectamente pero con visual c++ me dá error:
(c2440):type_cast, cannot conver from char[20] to void (__cdecl*)(void) ¿hay algún error de sintaxis?

#include <stdio.h>
#include <string.h>
char code[] = "aquí va una shellcode";
int main(int argc, char **argv)
{
   (*(void(*)()) code)();
   return 0;
}

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Error con cast.
« Respuesta #1 en: Jueves 3 de Febrero de 2011, 16:37 »
0
Me pa que los paréntesis del cast están mal...

Esto sí fona:

#include "stdafx.h"
#include <windows.h>
char code[] = "aquí va una shellcode";
typedef void (*pfnc_initDevice)(void);

int _tmain(int argc, _TCHAR* argv[])
{
   pfnc_initDevice pfnc=(pfnc_initDevice)&code[0];
   pfnc();
   return 0;
}
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Error con cast.
« Respuesta #2 en: Jueves 3 de Febrero de 2011, 20:01 »
0
Cita de: "rfog"
Me pa que los paréntesis del cast están mal...

Esto sí fona:

#include "stdafx.h"
#include <windows.h>
char code[] = "aquí va una shellcode";
typedef void (*pfnc_initDevice)(void);

int _tmain(int argc, _TCHAR* argv[])
{
   pfnc_initDevice pfnc=(pfnc_initDevice)&code[0];
   pfnc();
   return 0;
}
pues sí, este funciona con visual c++. De todas formas el anterior funciona perfectamente con gcc (o dev-c++), y la sintaxis parece c++ normal y corriente, será algo de que  visualc++ no acepta ese tipo de casts "anidados"? Porque lo que es un error de sintaxis no parece ya que va en gcc. También es cierto que el código es mucho más claro con el typedef.

rfog

  • Miembro MUY activo
  • ***
  • Mensajes: 166
    • Ver Perfil
Re: Error con cast.
« Respuesta #3 en: Jueves 3 de Febrero de 2011, 20:38 »
0
Pues no te lo puedo confirmar exactamente.

Es que hay diferencias entre C y C++. C++ es más estricto con los tipos, en C casi puedes juntar peras con manzanas sin problemas... Si los estás compilando en GNU como C, lo mismo Visual C++ compilado como C también traga...

De todos modos, si quieres estar seguro, búscate el "Comeau" Frontend y mete ese código (el tuyo y el mío). El que no entre en el Comeau es que no es código correcto.
Microsoft Visual C++ MVP - Mi blog sobre programación: http://geeks.ms/blogs/rfog

black_flowers

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Error con cast.
« Respuesta #4 en: Jueves 3 de Febrero de 2011, 23:56 »
0
Cita de: "rfog"
Pues no te lo puedo confirmar exactamente.

Es que hay diferencias entre C y C++. C++ es más estricto con los tipos, en C casi puedes juntar peras con manzanas sin problemas... Si los estás compilando en GNU como C, lo mismo Visual C++ compilado como C también traga...

De todos modos, si quieres estar seguro, búscate el "Comeau" Frontend y mete ese código (el tuyo y el mío). El que no entre en el Comeau es que no es código correcto.

no importa...
me vale con que me funcione, un saludo!! :good: