Итак, я работал над простым форматным эксплойтом строки и последние 3 часа или около того я бился головой о таблицу, удивляясь, почему мои шестнадцатеричные значения не появляются в стеке.
Если кто-нибудь сможет меня просветить, я буду очень признателен.
1.
Изначально я использовал python для сценариев, когда выполнял эти задачи ив частности, этот пример:
python -c 'print "AAAAA\xcc\xd5\xff\x4f"' > a
и последующее просмотр стека в GDB:
format string>
0xffffd550: 0xffffd584 0xf7ffdab8 0x41f95300 0x41414141
0xffffd560: 0x95c38cc3 0x0a4fbfc3 0xf7e2ec00 0xf7f8f820
Теперь похоже, что он не появляется после «AAAAA» (используется 5, поскольку не выровнен).
2.
Однако, когда я использую другой адрес, с которым я ранее работал:
python -c 'print "AAAAA\x5c\x57\x55\x56"' > a
, я получаю:
format string>
0xffffd550: 0xffffd584 0xf7ffdab8 0x41f95300 0x41414141
0xffffd560: 0x5655575c 0x0000000a 0xf7e2ec69 0xf7f8f820
И, кажется, прекрасно?
3.
Кроме того, когда я использую что-то вроде:
echo -en "AAAAA\xcc\xd5\xff\x4f" > b
Я могу правильно установить значение в стеке так:
format string>
0xffffd550: 0xffffd584 0xf7ffdab8 0x41f95300 0x41414141
0xffffd560: 0x4fffd5cc 0x00000000 0xf7e2ec69 0xf7f8f820
Ниже приведены выходные данные файлов a и b соответственно:
AAAAA���O
AAAAAÌÕÿO