-1
我有點困惑第一個shellcode示例如何工作。我已經通過GDB運行了它,並且我已經驗證它是正確的,但我不確定它如何最終在第一個地方工作。下面是代碼的樣子:(其實我已經取代了最初產生一個外殼的shellcode到一個輸出「Hello World」,但不應該有太大的差異)Shellcoder's Handbook:第一個shellcode示例
char shellcode[] =
"\xeb\x13\x59\x31\xc0\xb0\x04\x31\xdb\x43\x31\xd2\xb2\x0f\xcd\x80"
"\xb0\x01\x4b\xcd\x80\xe8\xe8\xff\xff\xff\x48\x65\x6c\x6c\x6f"
"\x20\x77\x6f\x72\x6c\x64\x0a\x0d";
int main()
{
int *ret;
ret = (int *)&ret + 2;
(*ret) = (int)shellcode;
return 0;
}
ret
如果只有一個整數指針,它應該只有4個字節長,它該如何工作? shellcode本身大約有40個字節長!如果有的話,所有ret
應該retreive是shellcode的前4個字節,而不是執行整個事情!
有人可以請向我解釋這是如何工作的?