retdec
value_protect.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_BIN2LLVMIR_OPTIMIZATIONS_VALUE_PROTECT_VALUE_PROTECT_H
8 #define RETDEC_BIN2LLVMIR_OPTIMIZATIONS_VALUE_PROTECT_VALUE_PROTECT_H
9 
10 #include <llvm/IR/Function.h>
11 #include <llvm/IR/Module.h>
12 #include <llvm/Pass.h>
13 
16 
17 namespace retdec {
18 namespace bin2llvmir {
19 
36 class ValueProtect : public llvm::ModulePass
37 {
38  public:
39  static char ID;
40  ValueProtect();
41  virtual bool runOnModule(llvm::Module& M) override;
42  bool runOnModuleCustom(llvm::Module& M, Config* c, Abi* abi);
43 
44  private:
45  bool run();
46  bool protect();
47  bool protectStack();
48  bool protectRegisters(bool skipCalledFunctions = true);
49  bool protectLoadStores();
50  bool unprotect();
51 
52  void protectValue(
53  llvm::Value* val,
54  llvm::Type* t,
55  llvm::Instruction* before);
56 
57  llvm::Function* getOrCreateFunction(llvm::Type* t);
58  llvm::Function* createFunction(llvm::Type* t);
59 
60  private:
61  llvm::Module* _module = nullptr;
62  Config* _config = nullptr;
63  Abi* _abi = nullptr;
64  static std::map<llvm::Type*, llvm::Function*> _type2fnc;
65 };
66 
67 } // namespace bin2llvmir
68 } // namespace retdec
69 
70 #endif
ABI information.
Config DB provider for bin2llvmirl.
Definition: abi.h:27
Definition: config.h:24
Definition: value_protect.h:37
bool protectRegisters(bool skipCalledFunctions=true)
Definition: value_protect.cpp:388
bool run()
Definition: value_protect.cpp:297
bool protect()
Definition: value_protect.cpp:316
ValueProtect()
Definition: value_protect.cpp:271
static char ID
Definition: value_protect.h:39
llvm::Module * _module
Definition: value_protect.h:61
bool unprotect()
Definition: value_protect.cpp:646
virtual bool runOnModule(llvm::Module &M) override
Definition: value_protect.cpp:277
bool protectStack()
Definition: value_protect.cpp:330
bool protectLoadStores()
Definition: value_protect.cpp:481
static std::map< llvm::Type *, llvm::Function * > _type2fnc
Definition: value_protect.h:64
bool runOnModuleCustom(llvm::Module &M, Config *c, Abi *abi)
Definition: value_protect.cpp:285
Config * _config
Definition: value_protect.h:62
void protectValue(llvm::Value *val, llvm::Type *t, llvm::Instruction *before)
Definition: value_protect.cpp:459
llvm::Function * getOrCreateFunction(llvm::Type *t)
Definition: value_protect.cpp:622
llvm::Function * createFunction(llvm::Type *t)
Definition: value_protect.cpp:628
Abi * _abi
Definition: value_protect.h:63
The frontend-end part of the decompiler.
Definition: archive_wrapper.h:19