Шеллкод на C. Что это значит?

Я не очень понимаю, как этот код делает то, что он делает:

char shellcode[] = "\xbb\x00\x00\x00\x00"           
                   "\xb8\x01\x00\x00\x00"                  
                   "\xcd\x80";                  

int main()
{
    int *ret;
    ret = (int *)&ret + 2;
    (*ret) = (int)shellcode;
}

Хорошо, я знаю:

int *ret;

устанавливает указатель на int. и:

ret = (int *)&ret + 2;

задает адрес ret и 2 байта (кажется).

Но я не понимаю, что это значит:

(int *)&ret

Я знаю, что означает &ret, но не знаю, что (int *)&retозначает. Кроме того, как он выполняет шеллкод, присваивая значение шеллкоддля ret?

ОБНОВЛЕНИЕ: В чем разница между:

(int *)&ret  + 2

и:

&ret + 2
15
задан Richard J. Ross III 22 March 2012 в 12:27
поделиться