псевдокод функции, защищенной Pro-Police (добавленные строки выделены жирным шрифтом)
При всей надежности Pro-Police, отсутствие сторожевых слов между массивами, делает атаку по-прежнему возможной, поскольку затирание нижеследующих массивов порождает целый каскад вторичных переполнений (особенно целочисленных), да и массивы из указателей не такая уж большая редкость. Тем не менее такая проверка (кстати говоря, обещанная в следующих версиях Pro-Police) приведет к существенному падению производительности, что явно пойдет не на пользу ее популярности.
stack-guard | .NET | stack-shield | Pro-police | ||||||
защищает адрес возврата | да | да | частично | да | |||||
защищает указатель кадра | нет | да | нет | да | |||||
защищает локальные переменные | нет | нет | частично | да | |||||
защищает аргументы | нет | нет | нет | да | |||||
защищает буфера | нет | нет | нет | нет | |||||
canary word случаен | нет | частично | — | да | |||||
защищает canary word от перезаписи | да | нет | — | да |