использование электрического забора в программе на C ++

В последнее время я экспериментировал с Electric Fence и не могу понять, как использовать его с кодом на C ++.

Вот пример:

// test.cpp
#include <cstdlib>                                                                                                                                         

using namespace std;                                                                                                                                       

int main()                                                                                                                                                 
{                                                                                                                                                                                                                                                                                                     
        int *a = new int(10);                                                                                                                              
        delete a;                                                                                                                              
}  

Я скомпилировал его с помощью

g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread

И я не вижу баннер Electric Fence в начале и не могу найти символы EF в исполняемом файле (с помощью команды nm).

Но если я модифицирую программу так:

// test.cpp
#include <cstdlib>                                                                                                                                         

using namespace std;                                                                                                                                       

int main()                                                                                                                                                 
{                                                                                                                                                          
        char *p = (char*)malloc(20);                                                                                                                       
        free(p);                                                                                                                                           
        int *a = new int(10);                                                                                                                              
        delete a;
}

все хорошо - появляется EF. Я знаю, что это вроде как решает проблему, я знаю :). Я просто хочу понять, почему это вообще не сработало, потому что new () должен вызывать malloc () и delete () вызовы free () , нет?

Я занялся этим большим проектом, в котором использовались библиотеки boost и некоторые другие. И эта программа никогда не вызывает напрямую malloc () или free () . И когда я собираю его с помощью EF, я не только связал EF с финальным исполняемым файлом, но и перестроил все библиотеки, пытаясь связать с ними EF. И я не могу найти символы EF ни в одном из них. Это правильный подход? Или это неправильно, и в конце концов, только EF должен быть связан с исполняемым файлом, а библиотеки должны быть оставлены нетронутыми? Но снова я не могу найти символы EF в исполняемом файле.

5
задан DavidH 7 February 2018 в 20:31
поделиться