Size: a a a

2021 June 21

IG

Ivan Gaydamakin in iOS Fathers
источник

IG

Ivan Gaydamakin in iOS Fathers
Лол кек
источник

12

1 2 in iOS Fathers
интереснее узнать почему так происходит
источник

IG

Ivan Gaydamakin in iOS Fathers
String format видимо кто то додумался заюзать криво походу
источник

BP

Bohdan Protas in iOS Fathers
По всей видимости, система ошибочно интерпретирует буквы, следующие за «%», как спецификаторы формата. В Си-подобных языках программирования они обрабатываются компилятором, определяя вид аргументов
источник

BP

Bohdan Protas in iOS Fathers
то так в статье написано
источник

12

1 2 in iOS Fathers
Если оно определяет как спецификатор формата, то можно заполнить всю следущую память своим кодом (в крайнем случае своими данными)
источник

BP

Bohdan Protas in iOS Fathers
мне от интересно, кто вообще к такой всратой сети конектиться)
источник

12

1 2 in iOS Fathers
Я думаю что есть специальный тест на ввод спецификаторов с разной хоенью :)
источник
2021 June 22

ВК

Виталий Кудрин... in iOS Fathers
не обрабатываются они компилятором, это просто строковый параметр обычной библиотечной функции
источник

ВК

Виталий Кудрин... in iOS Fathers
компилятор может разве что защиту от дурака включить при статическом анализе
источник

TS

Tim S in iOS Fathers
если вы про функции типа printf, где % используется для форматирования строки, то да, она небезопасна.

printf и прочие похожие функции по этим процентам считают число аргументов, которые можно взять из стека. Из стека — если используется стандарт вызова stdcall.

Соответственно, если в строке будет лишний знак процента — то стек поедет. Т.е. получается, что функция достанет из стека на один аргумент больше. Значит остальные значения в стеке, нужные другим функциям будут смещены на 1 параметр. Ну и в стеке не только аргументы могут храниться. Последствия от такого смещения трудно предсказать.
источник

ВК

Виталий Кудрин... in iOS Fathers
не только количество но и размер каждого
источник

ВК

Виталий Кудрин... in iOS Fathers
стек не поедет никуда, просто функция будет ожидать одни данные в стеке, а получит совсем другие
источник

TS

Tim S in iOS Fathers
Но… ios же наследие десктопной макоси… вот, а макось на х86-64 подчиняется System V ABI, как и BSD системы, как и Linux.

Так вот, согласно System V ABI — первые 6 аргументов функций передаются через регистры процессора. Если аргументов больше 6-ти, остальные пойдут через стек.

Соответственно такой способ более безопасен. Меньше вероятность, что стек куда-то уедет.

Правда не знаю, действует ли этот стандарт на ARM процессорах, ведь ios собирается для ARM.
источник

ВК

Виталий Кудрин... in iOS Fathers
хотя конечно если и с размерами не угадать, то поедет
источник

TS

Tim S in iOS Fathers
ну достань из стека лишний аргумент, и посмотри что произойдет со стеком. Какой будет следующий аргумент на стеке? И его ли ожидала следующая за printf инструкция?
источник

12

1 2 in iOS Fathers
Первые 6 аргументов передаются через регистры в том случае если помещаются в регистры ?
источник

TS

Tim S in iOS Fathers
да, а если нет, то их адреса
источник

12

1 2 in iOS Fathers
А адреса покажут куда?
источник