Snažím sa odovzdať argument príkazového riadku do programu „notesearch.c“, aby som preplnil vyrovnávaciu pamäť a prepísal spiatočnú adresu na 0x00007fff9e89b2e7 v malom formáte endian pomocou príkazu:
./notesearch $ (perl -e „print“ xe7xb2x89x9exffx7fx00x00 "x 20 ")
Hodnota uložená v argv[1] je však:
0x7fff9cd441cc: 0xe7 0xb2 0x89 0x9e 0xff 0x7f 0xe7 0xb2
0x7fff9cd441d4: 0x89 0x9e 0xff 0x7f 0xe7 0xb2 0x89 0x9e
0x7fff9cd441dc: 0xff 0x7f 0xe7 0xb2 0x89 0x9e 0xff 0x7f ......
Nuly nie sú uložené! Takže skutočná 64-bitová prepísaná návratová adresa môže byť akoukoľvek permutáciou nenulových hexadecimálnych číslic. Ako uložím aj nuly?
odpovede:
2 pre odpoveď č. 1Na unixovom systéme nie je možné odovzdať argumenty obsahujúce