Programación General > Visual C++
Error con cast.
(1/1)
black_flowers:
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:
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;
}
black_flowers:
--- 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;
}
--- Fin de la cita ---
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:
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.
black_flowers:
--- 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.
--- Fin de la cita ---
no importa...
me vale con que me funcione, un saludo!! :good:
Navegación
Ir a la versión completa