💻 Uruchamianie shellcode (VC++)

🐴 haker.com.pl

🟦 g3t0
🖊️ 22:33 24-09-2006
Hello,
Mam takie pytanie.
Dlaczego kompilacja poniższego kodu zwraca mi błąd:
error C2440:=:cannot convert from char [13] to void(cdecl *)(void)

char shellcode[] = xe8;
void (*opcode) ();
void main()
{
opcode=shellcode;
opcode();
}

W gcc nie miałem z tym problemu.
🟦 eax
🖊️ 14:00 25-09-2006
Zobacz, zadeklarowałeś shellcode jako typ char, a teraz odwołujesz się do niego jak do void.
🟦 M1ch00
🖊️ 16:16 25-09-2006
Proponuje się zastanowić: W języku C można tak wskaźniki przypisywać (gcc co najwyżej warn rzuci), pod C++ nie. Co więc trzeba zrobić? Trzeba rzutować.
char shellcode[] = xc3; //dałem ret, żeby sprawdzić
void (*opcode) ();

int main()
{
opcode=(void(*)())shellcode;
opcode();
}
🟦 g3t0
🖊️ 12:39 26-09-2006
Dziękuję za pomoc.
To rzutowanie też wywalało błędy, ale przeszło.
🟦 M1ch00
🖊️ 16:58 26-09-2006
Jeszcze jedno - jak to ma być C++, to tam powinno być:
opcode=reinterpret_cast<void(*)()>(shellcode);
Tyle, że każde rzutowanie funkcja - obiekt jest wg. standardu niepoprawne i warn się i tak pokaże.
Wszystkie treści umieszczone na tej witrynie są chronione prawem autorskim. Surowo zabronione jest kopiowanie i rozpowszechnianie zawartości tej witryny bez zgody autora. Wszelkie opublikowane tutaj treści (w tym kody źródłowe i inne) służą wyłącznie celom informacyjnym oraz edukacyjnym. Właściciele tej witryny nie ponoszą odpowiedzialności za ewentualne niezgodne z prawem wykorzystanie zasobów dostępnych w witrynie. Użytkownik tej witryny oświadcza, że z zamieszczonych tutaj danych korzysta na własną odpowiedzialność. Wszelkie znaki towarowe i nazwy zastrzeżone zostały użyte jedynie w celach informacyjnych i należą wyłącznie do ich prawnych właścicieli. Korzystając z zasobów witryny haker.com.pl oświadczasz, że akceptujesz powyższe warunki oraz politykę prywatności.