ARM P C перезаписан с неправильным значением в переполнении буфера - PullRequest
2 голосов
/ 24 января 2020

Я работаю над разрушением стека в ARM, и у меня есть буфер, объявленный как:

char buff [12];

в моем коде.

Для того, чтобы найти место, где P C перезаписывается в GDB. Я пишу

AAAABBBBCCCCDDDDEEEEFFFF в буфер

Я ожидал, что D DDD перезапишет FP (r11) как 0x44444444 (и он выполняется правильно), но P C был переопределен с 0x45454544 ( вместо 0x45454545 )

Есть ли у кого-нибудь идея почему последний байт D (44) вместо E (45)? Я пробовал более длинный ввод, но значение в P C всегда падает на несколько битов.

Снимок экрана вывода GDB

1 Ответ

0 голосов
/ 24 января 2020

Регистр P C не может содержать нечетное значение - младший бит принудительно устанавливается в 0 для обеспечения выравнивания адреса.

...