1#ifndef ROSE_BinaryAnalysis_CallingConvention_Analysis_H
2#define ROSE_BinaryAnalysis_CallingConvention_Analysis_H
3#include <featureTests.h>
4#ifdef ROSE_ENABLE_BINARY_ANALYSIS
5#include <Rose/BinaryAnalysis/CallingConvention/BasicTypes.h>
7#include <Rose/BinaryAnalysis/RegisterParts.h>
8#include <Rose/BinaryAnalysis/Variables.h>
10#include <Sawyer/Optional.h>
13namespace BinaryAnalysis {
14namespace CallingConvention {
35#ifdef ROSE_HAVE_BOOST_SERIALIZATION_LIB
37 friend class boost::serialization::access;
40 void serialize(S &s,
const unsigned ) {
41 s & BOOST_SERIALIZATION_NVP(cpu_);
42 s & BOOST_SERIALIZATION_NVP(regDict_);
43 s & BOOST_SERIALIZATION_NVP(defaultCc_);
44 s & BOOST_SERIALIZATION_NVP(hasResults_);
45 s & BOOST_SERIALIZATION_NVP(didConverge_);
46 s & BOOST_SERIALIZATION_NVP(restoredRegisters_);
47 s & BOOST_SERIALIZATION_NVP(inputRegisters_);
48 s & BOOST_SERIALIZATION_NVP(outputRegisters_);
49 s & BOOST_SERIALIZATION_NVP(inputStackParameters_);
50 s & BOOST_SERIALIZATION_NVP(outputStackParameters_);
51 s & BOOST_SERIALIZATION_NVP(stackDelta_);
180 void print(std::ostream&,
bool multiLine=
false)
const;
Function calling convention.
const RegisterParts & inputRegisters() const
Input registers.
const Variables::StackVariables & inputStackParameters() const
Input stack parameters.
Analysis()
Default constructor.
void print(std::ostream &, bool multiLine=false) const
Print information about the analysis results.
const RegisterParts & calleeSavedRegisters() const
Callee-saved registers.
void defaultCallingConvention(const DefinitionPtr &)
Property: Default calling convention.
bool match(const DefinitionPtr &) const
Determine whether a definition matches.
void registerDictionary(const RegisterDictionaryPtr &d)
Property: Register dictionary.
Sawyer::Optional< int64_t > stackDelta() const
Concrete stack delta.
void analyzeFunction(const Partitioner2::PartitionerConstPtr &, const Sawyer::SharedPointer< Partitioner2::Function > &)
Analyze one function.
const RegisterParts & outputRegisters() const
Output registers.
void clearResults()
Clear analysis results.
bool didConverge() const
Whether the analysis results are valid.
DefinitionPtr defaultCallingConvention() const
Property: Default calling convention.
void clearNonResults()
Clears everything but results.
Dictionary match(const Dictionary &) const
Find matching calling convention definitions.
bool hasResults() const
Whether a function has been analyzed.
Analysis(const InstructionSemantics::BaseSemantics::DispatcherPtr &)
Construct an analysis using a specified dispatcher.
Analysis(const Disassembler::BasePtr &)
Construct an analyzer using a specified disassembler.
RegisterDictionaryPtr registerDictionary() const
Property: Register dictionary.
const Variables::StackVariables & outputStackParameters() const
Output stack parameters.
Holds a set of registers without regard for register boundaries.
Holds a value or nothing.
std::vector< DefinitionPtr > Dictionary
An ordered collection of calling convention definitions.
boost::shared_ptr< Dispatcher > DispatcherPtr
Shared-ownership pointer to a semantics instruction dispatcher.
boost::shared_ptr< State > StatePtr
Shared-ownership pointer to a semantic state.