Tôi không thực sự nhận được như thế nào mã này làm những gì nó làm:Shellcode trong C - Điều này có nghĩa là gì?
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;
}
Được rồi, tôi biết:
int *ret;
đặt một con trỏ int. và:
ret = (int *)&ret + 2;
đặt địa chỉ của ret và 2 byte (tôi nghĩ).
Nhưng tôi không có được những gì này có nghĩa là:
(int *)&ret
Tôi biết &ret
phương tiện gì nhưng không phải là ý nghĩa của (int *)&ret
. Ngoài ra, làm thế nào để nó thực thi shellcode bằng cách gán giá trị của shellcode
đến ret
?
UPDATE: sự khác biệt giữa là gì:
(int *)&ret + 2
và:
&ret + 2
Tò mò tại sao rất nhiều downvotes ... shellcode trông khá vô hại. – FatalError