ROSE  0.11.145.0
ExitStatusExecutor.h
1 #ifndef ROSE_BinaryAnalysis_Concolic_I386Linux_ExitStatusExecutor_H
2 #define ROSE_BinaryAnalysis_Concolic_I386Linux_ExitStatusExecutor_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_CONCOLIC_TESTING
5 #include <Rose/BinaryAnalysis/Concolic/BasicTypes.h>
6 
7 #include <boost/serialization/export.hpp>
8 #include <boost/serialization/access.hpp>
9 #include <boost/serialization/nvp.hpp>
10 #include <boost/serialization/base_object.hpp>
11 #include <Rose/BinaryAnalysis/Concolic/ConcreteExecutor.h>
12 #include <Sawyer/Optional.h>
13 #include <Sawyer/SharedPointer.h>
14 #include <string>
15 
16 namespace Rose {
17 namespace BinaryAnalysis {
18 namespace Concolic {
19 namespace I386Linux {
20 
22 class ExitStatusExecutor: public Concolic::ConcreteExecutor {
23  using Super = Concolic::ConcreteExecutor;
24 
25 public:
27  using Ptr = ExitStatusExecutorPtr;
28 
32  using Persona = Sawyer::Optional<unsigned long>;
33 
34 protected:
35  bool useAddressRandomization_ = false; // enable/disable address space randomization in the OS
36 
37 protected:
38  explicit ExitStatusExecutor(const std::string &name); // for creating a factory
39  explicit ExitStatusExecutor(const DatabasePtr&);
40 
41 public:
42  ~ExitStatusExecutor();
43 
45  static Ptr instance(const DatabasePtr&);
46 
48  static Ptr factory();
49 
56  bool useAddressRandomization() const { return useAddressRandomization_; }
57  void useAddressRandomization(bool b) { useAddressRandomization_ = b; }
60 public:
61  virtual bool matchFactory(const std::string&) const override;
62  virtual Concolic::ConcreteExecutorPtr instanceFromFactory(const DatabasePtr&) override;
63  virtual Concolic::ConcreteResultPtr execute(const TestCasePtr&) override;
64 };
65 
66 } // namespace
67 } // namespace
68 } // namespace
69 } // namespace
70 
71 #endif
72 #endif
Holds a value or nothing.
Definition: Optional.h:49
Main namespace for the ROSE library.
Sawyer::SharedPointer< Node > Ptr
Reference counting pointer.