Я не очень понимаю, как этот код делает то, что он делает:
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