Tôi đã tìm kiếm hàng giờ và tôi không thể tìm thấy bất kỳ thứ gì có thể giúp tôi. Tôi đang làm việc trên một dự án liên quan đến một FunctionPass. Tôi đã thực hiện một phương thức runOnFunction (Function & f) và nó hoạt động tốt. Về cơ bản nó cần phải:Làm thế nào để chèn một chỉ dẫn LLVM?
1) Phát hiện một cửa hàng hướng dẫn
2) Chuyển đổi địa chỉ bộ nhớ của hướng dẫn cửa hàng để một Integer
3) Thay đổi số nguyên sử dụng một phép toán AND hoạt động (0000FFFF)
4) Chuyển đổi số nguyên trở lại con trỏ
Cho đến nay tôi đã có những điều sau đây:
virtual bool runOnFunction(Function &F) {
for (Function::iterator bb = F.begin(), bbe = F.end(); bb != bbe; ++bb) {
BasicBlock& b = *bb;
for (BasicBlock::iterator i = b.begin(), ie = b.end(); i != ie; ++i) {
if(StoreInst *si = dyn_cast<StoreInst>(&*i)) {
PtrToIntInst* ptrToInt = new PtrToIntInst(si->getPointerOperand(), IntegerType::get(si->getContext(), 32), "", si);
}
}
}
return true;
}
Tôi không thể cho cuộc sống của tôi tìm ra cách để thực sự chèn các hướng dẫn, hoặc thậm chí tìm một cách để tạo ra một hướng dẫn và. Nếu bất cứ ai có thể chỉ cho tôi đi đúng hướng, điều đó thật tuyệt.
Xin cảm ơn trước.
Làm thế nào để bạn chăm sóc người kết thúc trong trường hợp đi qua một khối cơ bản kèm theo? – PatoBeltran
@PatoBeltran Thêm hướng dẫn theo cách không kích hoạt xác minh khối cơ bản, do đó bạn có thể có khối cơ bản không đúng định dạng trong các giai đoạn trung gian đó. Chỉ cần chắc chắn để đặt một terminator ở cuối trước khi bạn kết thúc với chức năng vượt qua của bạn. – Oak