1#ifndef ROSE_BinaryAnalysis_Concolic_BasicTypes_H 
    2#define ROSE_BinaryAnalysis_Concolic_BasicTypes_H 
    3#include <featureTests.h> 
    4#ifdef ROSE_ENABLE_CONCOLIC_TESTING 
    7#include <Rose/BinaryAnalysis/BasicTypes.h> 
    8#include <Rose/StringUtility/Escape.h> 
   10#include <Rose/Exception.h> 
   11#include <rose_strtoull.h> 
   13#include <Sawyer/Callbacks.h> 
   14#include <Sawyer/Message.h> 
   15#include <Sawyer/SharedPointer.h> 
   17#include <boost/shared_ptr.hpp> 
   21namespace BinaryAnalysis {
 
   83    explicit Exception(
const std::string &mesg): 
Rose::Exception(mesg) {}
 
   84    ~Exception() throw () {}
 
   90bool isRunningInContainer();
 
   97std::string 
toString(
const SymbolicExpressionPtr&, SymbolicExpression::Formatter&);
 
   98std::string 
toString(
const SymbolicExpressionPtr&);
 
   99std::string 
toString(uint64_t value, 
size_t nBits);
 
  110class ConcolicExecutor;
 
  113class ConcolicExecutorSettings;
 
  115class ConcreteExecutor;
 
  132class ExecutionLocation;
 
  134class ExecutionManager;
 
  140class SharedMemoryCallback;
 
  145class SharedMemoryContext;
 
  150class SyscallCallback;
 
  151using SyscallCallbackPtr = std::shared_ptr<SyscallCallback>;
 
  171    using Value = size_t;                               
 
  179    ObjectId(
const Value& v)
 
  182    ObjectId(
const ObjectId& rhs)
 
  193    explicit ObjectId(
const std::string &s) {
 
  195        uint64_t 
id = rose_strtoull(s.c_str(), &rest, 0);
 
  196        while (*rest && isspace(*rest)) ++rest;
 
  198            throw Exception(
"invalid syntax for object ID: \"" + StringUtility::cEscape(s) + 
"\"");
 
  200            *
this = boost::numeric_cast<Value>(
id);
 
  201        } 
catch (
const boost::bad_numeric_cast&) {
 
  202            throw Exception(
"parsed object ID out of range: \"" + StringUtility::cEscape(s) + 
"\"");
 
  207    ObjectId<Tag>& operator=(
const ObjectId<Tag>& lhs) {
 
  208        this->Super::operator=(lhs);
 
  213    ObjectId<Tag>& operator=(
const Value& v) {
 
  214        this->Super::operator=(v);
 
  218    explicit operator bool()
 const {                    
 
  225    bool operator<(
const ObjectId<_Tag>& lhs, 
const ObjectId<_Tag>& rhs);
 
  228    const Super& optional()
 const {
 
  236bool operator<(
const ObjectId<Tag>& lhs, 
const ObjectId<Tag>& rhs)
 
  238    if (!rhs) 
return false;
 
  239    if (!lhs) 
return true;
 
  241    return lhs.get() < rhs.get();
 
  244using TestSuiteId = ObjectId<TestSuite>;                
 
  245using SpecimenId = ObjectId<Specimen>;                  
 
  246using TestCaseId = ObjectId<TestCase>;                  
 
  247using ExecutionEventId = ObjectId<ExecutionEvent>;      
 
  258struct ObjectTraits<TestSuite> {
 
  259    using Id = TestSuiteId;
 
  263struct ObjectTraits<Specimen> {
 
  264    using Id = SpecimenId;
 
  268struct ObjectTraits<TestCase> {
 
  269    using Id = TestCaseId;
 
  273struct ObjectTraits<ExecutionEvent> {
 
  274    using Id = ExecutionEventId;
 
  284#include <Rose/BinaryAnalysis/Concolic/Callback/BasicTypes.h> 
  285#include <Rose/BinaryAnalysis/Concolic/I386Linux/BasicTypes.h> 
  286#include <Rose/BinaryAnalysis/Concolic/M68kSystem/BasicTypes.h> 
Base class for all ROSE exceptions.
 
Holds a value or nothing.
 
Reference-counting intrusive smart pointer.
 
@ POST
Visitor is called after visiting the node's children.
 
@ PRE
Visitor is called before visiting the node's children.
 
@ YES
Allocate memory for real.
 
@ NO
Only query an allocation.
 
boost::shared_ptr< class RiscOperators > RiscOperatorsPtr
Shared-ownership pointer to concrete RISC operations.
 
void initDiagnostics()
Initialize diagnostics.
 
Object
The five kind of objects manipulated by Rose::CodeGen::API and associated Rose::CodeGen::Factory.
 
ROSE_DLL_API Sawyer::Message::Facility mlog
Diagnostic facility for the ROSE library as a whole.
 
ROSE_UTIL_API std::string toString(const Path &)
Convert a path to a string.
 
When
When something should be done.
 
size_t Id
Attribute identification.
 
Id id(const std::string &name)
Returns the ID for an attribute name.
 
const char * ConcolicPhase(int64_t)
Convert Rose::BinaryAnalysis::Concolic::ConcolicPhase enum constant to a string.
 
const char * Update(int64_t)
Convert Rose::BinaryAnalysis::Concolic::Update enum constant to a string.
 
const char * IoDirection(int64_t)
Convert Rose::BinaryAnalysis::Concolic::IoDirection enum constant to a string.
 
const char * ShowAssertions(int64_t)
Convert Rose::BinaryAnalysis::Concolic::ShowAssertions enum constant to a string.
 
const char * InputType(int64_t)
Convert Rose::BinaryAnalysis::Concolic::InputType enum constant to a string.
 
const char * ShowEvents(int64_t)
Convert Rose::BinaryAnalysis::Concolic::ShowEvents enum constant to a string.
 
const char * Architecture(int64_t)
Convert Rose::BinaryAnalysis::Disassembler::Mips::Decoder::Architecture enum constant to a string.