Eksperymentowałem ostatnio z Electric Fence i nie mogę wymyślić jak go użyć z kodem C++.używając elektrycznego ogrodzenia w programie C++
Oto przykład:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
int *a = new int(10);
delete a;
}
Skompilowałem go
g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
I nie widzę Ogrodzenia elektryczne baner na początku i nie może znaleźć symbole EF w pliku wykonywalnego (przy użyciu polecenie nm). Ale jeśli zmodyfikować program tak jak
:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
char *p = (char*)malloc(20);
free(p);
int *a = new int(10);
delete a;
}
wszystko jest dobre - pojawia EF. Wiem, że to trochę rozwiązuje problem, wiem :). Chcę tylko zrozumieć, dlaczego to nie zadziałało, ponieważ new()
powinien zadzwonić pod numer malloc()
i delete()
dzwoni free()
, nie?
Powodem, dla którego się do tego przyłączyłem, jest duży projekt z wykorzystaniem bibliotek doładowania i kilka innych. Ten program nigdy nie wywołuje bezpośrednio nazwy malloc()
ani free()
. I kiedy zbudowałem go z EF, nie tylko podłączyłem EF do końcowego pliku wykonywalnego, ale przebudowałem wszystkie biblioteki próbujące połączyć EF z nimi. I nie mogę znaleźć symboli EF w żadnym z nich. Czy to właściwe podejście? Czy to źle i EF tylko powinny być połączone z plikiem wykonywalnym w końcu, biblioteki powinny pozostać nienaruszone? Ale znowu nie mogę znaleźć symboli EF w pliku wykonywalnym.
dlaczego idziesz z efence nad Valgrind? – Anycorn
ponieważ muszę debugować program, który działa na ARMv5 (http://stackoverflow.com/q/9456194/4378). Valgrind nie jest tam deportowany. –