Очистка памяти надежно и перераспределенияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Очистка памяти надежно и перераспределения

Сообщение Anonymous »

После обсуждения здесь, если вы хотите получить безопасный класс для хранения конфиденциальной информации (например, паролей) в памяти, вы должны: < /p>


memset /wrent the memom MEMSET /очистить старую память, прежде чем освободить ее, наконец, < /li>
< /ul>

Так что это звучит хорошо, и я создал тестовый класс, чтобы увидеть, работает ли это. Поэтому я сделал простой тестовый пример, в котором я продолжаю добавлять слова «lol» и «wut», за которым последовал номер для этого безопасного класса буфера примерно тысячу раз, уничтожая этот объект, прежде чем, наконец, делать что -то, что вызывает ядро ​​свалку. Тем не менее, мне удалось найти их все еще, и подумал, является ли моя реализация просто глюка. Тем не менее, я попробовал то же самое, используя Secbyteblock от Cryptopp библиотеки: < /p>

Код: Выделить всё

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

int main(){
{
CryptoPP::SecByteBlock moo;

int i;
for(i = 0; i < 234; i++){
moo += (CryptoPP::SecByteBlock((byte*)"LOL", 3));
moo += (CryptoPP::SecByteBlock((byte*)"WUT", 3));

char buffer[33];
sprintf(buffer, "%d", i);
string thenumber (buffer);

moo += (CryptoPP::SecByteBlock((byte*)thenumber.c_str(), thenumber.size()));
}

moo.CleanNew(0);

}

sleep(1);

*((int*)NULL) = 1;

return 0;
}
< /code>

, а затем компилировать с помощью: < /p>

g++ clearer.cpp -lcryptopp -O0
< /code>

, а затем включить дамп Core < /p>

ulimit -c 99999999
< /code>

Но тогда, включив ядро ​​дамп и запустить его < /p>

./a.out ; grep LOLWUT core ; echo hello
< /code>

дает следующий выход < /p>

Segmentation fault (core dumped)
Binary file core matches
hello
< /code>

Что вызывает это? Вся область памяти для самого приложения Realloc, из -за перераспределения, вызванного приложением Secbyteblock? />https://i.sstatic.net/3ixb3.jpg>
[b] edit2 [/b]: обновленный код, так что он более легко компилируется, а инструкции по компиляции 

[b] final Edit3 [/b]: это выглядит как Memcpy. См. Реализация Rasmus 'MyMemcpy 
в его ответе ниже.

Подробнее здесь: https://stackoverflow.com/questions/106 ... llocations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»