Tôi muốn viết một thẻ LLVM để có thể truy cập mọi bộ nhớ. Đây là những gì tôi đang cố gắng làm.Sử dụng mã C/C++ bằng LLVM
Với bất kỳ chương trình C/C++ nào (như được đưa ra dưới đây), tôi đang cố gắng chèn các cuộc gọi đến một số chức năng, trước và sau mỗi lệnh đọc/ghi vào/từ bộ nhớ. Ví dụ xem xét các chương trình dưới đây C++ (Account.cpp)
#include <stdio.h>
class Account {
int balance;
public:
Account(int b)
{
balance = b;
}
~Account(){ }
int read()
{
int r;
r = balance;
return r;
}
void deposit(int n)
{
balance = balance + n;
}
void withdraw(int n)
{
int r = read();
balance = r - n;
}
};
int main()
{
Account* a = new Account(10);
a->deposit(1);
a->withdraw(2);
delete a;
}
Vì vậy, sau khi đo đạc chương trình của tôi sẽ giống như thế:
#include <stdio.h>
class Account
{
int balance;
public:
Account(int b)
{
balance = b;
}
~Account(){ }
int read()
{
int r;
foo();
r = balance;
foo();
return r;
}
void deposit(int n)
{
foo();
balance = balance + n;
foo();
}
void withdraw(int n)
{
foo();
int r = read();
foo();
foo();
balance = r - n;
foo();
}
};
int main()
{
Account* a = new Account(10);
a->deposit(1);
a->withdraw(2);
delete a;
}
nơi foo() có thể là bất kỳ chức năng như có được thời gian hệ thống hiện tại hoặc tăng số lượt truy cập .. v.v.
Vui lòng cho tôi ví dụ (mã nguồn, hướng dẫn, v.v.) và các bước về cách chạy. Tôi đã đọc hướng dẫn về cách làm cho một thẻ LLVM được đưa ra trên http://llvm.org/docs/WritingAnLLVMPass.html, nhưng không thể tìm ra cách viết một vượt qua cho vấn đề trên.
Vâng, bạn có thể quá tải toán tử để không chỉ thực hiện các chức năng bổ sung, trừ, chuyển nhượng thực sự mà còn gọi hàm tùy chỉnh của bạn. – vishakvkt
Tại sao bạn muốn thêm các chức năng này? Nếu bạn muốn gỡ lỗi chương trình của bạn có một phương pháp tốt hơn có sẵn. – tune2fs
Tôi sẽ bỏ phiếu để đóng câu hỏi này dưới dạng bản sao của lưu lượng truy cập http: // stackoverflow.com/questions/7526550/instrumenting-c-c-codes-using-llvm (ý tôi là, nhìn vào tiêu đề) và tôi nhận thấy rằng bạn là tác giả của cả hai. Làm thế nào để bạn mong đợi người dùng StackOverflow để cung cấp cho bạn câu trả lời lần này rằng họ đã không cung cấp cho bạn thời gian qua (thiếu làm việc đó cho bạn, điều đó sẽ không xảy ra)? –