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
Мобильная версия