Size: a a a

2020 June 11

M

Mikhail in pro.cxx
Alexey Tkachenko
чистить асинхронно, как это делает операционка с обнулением страниц?
Интересная мысль кстати. А есть ли проблемы в использовании std::concurrent например в операторе delete? )
источник

M

Mikhail in pro.cxx
Сейчас попробую кстати )
источник

AT

Alexey Tkachenko in pro.cxx
потенциально рекурсия
источник

M

Mikhail in pro.cxx
Alexey Tkachenko
потенциально рекурсия
Вообще да
источник

m

magras in pro.cxx
Mikhail
Всем привет! Задача такая, нужно зачищать память случайными значениями перед удалением. Код приложения большой, соответственно контроллировать это невозможно в ручную, поэтому есть идея переписать new/delete. Пока написал такой код, он работает, но время отклика на выполнение команды увеличивается в два раза -https://gist.github.com/synacker/6525acdd8f22a1e39880c4359c3e05af. Метод RandomClear нельзя оптимизировать. Соответственно, есть идея сделать memory pool, чтобы максимально снизить количество вызовов RandomClear. А теперь вопрос, можете подсказать какую нибудь простую реализацию менеджера памяти для С++? ) Но возможно есть другие идеи решения, задачу я описал )
А что вы имеете в виду под memory pool? Если речь о том, чтобы прикапывать удаленный кусок и возвращать его без зануления при следующем new, это инвалидирует всю идею зануления.
источник

M

Mikhail in pro.cxx
Но я попробую )
источник

M

Mikhail in pro.cxx
magras
А что вы имеете в виду под memory pool? Если речь о том, чтобы прикапывать удаленный кусок и возвращать его без зануления при следующем new, это инвалидирует всю идею зануления.
Не совсем. Я обнуляю память только когда отдаю ОС. Если я не буду отдавать ее ОС, то смысла обнулять нет
источник

m

magras in pro.cxx
Мне кажется, что это бесполезная работа. Я не эксперт в секьюрити и ОС, но на сколько я знаю обе популярные ОС зануляют страницы перед тем как отдать их другому приложению.

По моим представлениям занулять имеет смысл только для того, чтобы немного уменьшить шансы атакующего при use after free и чтении не инициализированных переменных в текущем процессе.
источник

M

Mikhail in pro.cxx
magras
Мне кажется, что это бесполезная работа. Я не эксперт в секьюрити и ОС, но на сколько я знаю обе популярные ОС зануляют страницы перед тем как отдать их другому приложению.

По моим представлениям занулять имеет смысл только для того, чтобы немного уменьшить шансы атакующего при use after free и чтении не инициализированных переменных в текущем процессе.
Точно нет. В венде каждая удаленная память зануляется, а какждая новая перезаписывается константой только в Debug сборке. В линуксах вообще нет зануления.
источник

m

magras in pro.cxx
Mikhail
Точно нет. В венде каждая удаленная память зануляется, а какждая новая перезаписывается константой только в Debug сборке. В линуксах вообще нет зануления.
Вы говорите о new/delete или о механизмах операционки?
источник

m

magras in pro.cxx
magras
Вы говорите о new/delete или о механизмах операционки?
В new/delete естественно есть свои кэши и внутри одного процесса это можно эксплуатировать. Но если new получает от OC новую страницу памяти, вроде она будет чистой.
источник

M

Mikhail in pro.cxx
magras
В new/delete естественно есть свои кэши и внутри одного процесса это можно эксплуатировать. Но если new получает от OC новую страницу памяти, вроде она будет чистой.
Интересная мысль ) Как теперь ее проверить )
источник

M

Mikhail in pro.cxx
magras
В new/delete естественно есть свои кэши и внутри одного процесса это можно эксплуатировать. Но если new получает от OC новую страницу памяти, вроде она будет чистой.
Для Windows так действительно происходит
источник

M

Mikhail in pro.cxx
источник

A

ARCHANGEL in pro.cxx
magras
В new/delete естественно есть свои кэши и внутри одного процесса это можно эксплуатировать. Но если new получает от OC новую страницу памяти, вроде она будет чистой.
точно будет, иначе был бы Information disclosure - уязвимость, дампали бы так память ядра и других процессов
источник

M

Mikhail in pro.cxx
ARCHANGEL
точно будет, иначе был бы Information disclosure - уязвимость, дампали бы так память ядра и других процессов
Да, логично )
источник

AT

Alexey Tkachenko in pro.cxx
Mikhail
Не совсем. Я обнуляю память только когда отдаю ОС. Если я не буду отдавать ее ОС, то смысла обнулять нет
если отдаёшь ОС, то она сама занулит
источник

M

Mikhail in pro.cxx
Alexey Tkachenko
если отдаёшь ОС, то она сама занулит
Да, это выяснил в предыдущих комментариях, спасибо
источник

E

Egor in pro.cxx
string s = "ELEMENTARY, MY DEAR WATSON";  
auto iter = s.begin() + 1;  
s += "!";  
cout << *iter << "\n";

Такой вопрос, разве если у нас итератор строки мы не можем iterator + 1 делать, только ++ ?
источник

A

ARCHANGEL in pro.cxx
можем, он рандомакксесс
источник