In gcc funziona correttamente. Il codice più o meno così:Esegui shellcode eseguendo il cast del puntatore alla funzione in Visual C++
unsigned char b[50] = "\xda\xd1 ... \x0"; //some shellcode with terminating \x0
((void(*)())b)(); //cast b to function pointer from void to void, then run it
Ma quando questo viene messo in Visual C++, sputa fuori questo messaggio di errore:
1>..\test.cpp(132): error C2440: 'type cast' : cannot convert from 'unsigned char [50]' to 'void (__cdecl *)(void)'
1> There is no context in which this conversion is possible
Qualcuno sa perché questo è così?
try '(* (void (*)()) & b [0])()'. –
Anche se riesci a farlo funzionare in qualche modo, è una pessima idea. –
Oppure: 'reinterpret_cast (statico_cast (b))()'. –