Tôi đã thử nghiệm với Hàng rào điện gần đây và tôi không thể tìm ra cách sử dụng nó với mã C++.sử dụng hàng rào điện trong chương trình C++
Dưới đây là một ví dụ:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
int *a = new int(10);
delete a;
}
tôi biên dịch nó với
g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
Và tôi không thấy hàng rào biểu ngữ điện vào lúc bắt đầu và không thể tìm thấy những biểu tượng EF trong thực thi (sử dụng lệnh nm).
Nhưng nếu tôi sửa đổi một chương trình như vậy:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
char *p = (char*)malloc(20);
free(p);
int *a = new int(10);
delete a;
}
mọi thứ đều tốt - EF xuất hiện. Tôi biết nó giải quyết được vấn đề, tôi biết :). Tôi chỉ muốn hiểu tại sao nó không hoạt động ngay từ đầu, bởi vì new()
nên gọi malloc()
và delete()
gọi free()
, không?
Lý do tôi tham gia vào dự án này là một dự án lớn sử dụng các thư viện tăng và nhiều thư viện khác. Và chương trình này không bao giờ gọi trực tiếp số malloc()
hoặc free()
. Và khi tôi xây dựng nó với EF, tôi không chỉ liên kết EF với bản thực thi cuối cùng mà còn xây dựng lại tất cả các thư viện cố gắng liên kết EF với họ. Và tôi không thể tìm thấy các biểu tượng EF trong cả hai. Đó có phải là cách tiếp cận đúng không? Hoặc là nó sai và EF chỉ nên được liên kết với thực thi cuối cùng, libs nên được còn nguyên vẹn? Nhưng một lần nữa tôi không thể tìm thấy biểu tượng EF trong thực thi sau đó.
tại sao bạn đi với efence qua valgrind? – Anycorn
vì tôi cần gỡ lỗi chương trình chạy trên ARMv5 (http://stackoverflow.com/q/9456194/4378). Valgrind không bị nhốt ở đó. –