Trong gcc, công cụ này hoạt động tốt. Mã này đi một cái gì đó như:Thực thi shellcode bằng cách truyền tới con trỏ hàm trong 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
Nhưng khi điều này được đặt trong Visual C++, nó spits ra thông báo lỗi này:
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
Bất cứ ai biết tại sao điều này là như vậy?
thử '(* (void (*)()) & b [0])()'. –
Ngay cả khi bạn nhận được điều này để làm việc bằng cách nào đó, đó là một ý tưởng rất xấu. –
Hoặc: 'reinterpret_cast (static_cast (b))()'. –