1 #ifndef ROSE_BinaryAnalysis_Debugger_Base_H
2 #define ROSE_BinaryAnalysis_Debugger_Base_H
3 #include <featureTests.h>
4 #ifdef ROSE_ENABLE_BINARY_ANALYSIS
5 #include <Rose/BinaryAnalysis/Debugger/BasicTypes.h>
7 #include <Rose/BinaryAnalysis/Debugger/ThreadId.h>
9 #include <Sawyer/BitVector.h>
10 #include <Sawyer/SharedObject.h>
11 #include <Sawyer/Trace.h>
14 namespace BinaryAnalysis {
34 Base& operator=(
const Base&) =
delete;
83 virtual std::vector<ThreadId>
threadIds() = 0;
128 template<
class Filter>
171 virtual std::vector<RegisterDescriptor> availableRegisters() = 0;
192 virtual size_t readMemory(rose_addr_t va,
size_t nBytes, uint8_t *buffer) = 0;
197 virtual std::vector<uint8_t>
readMemory(rose_addr_t va,
size_t nBytes) = 0;
209 virtual size_t writeMemory(rose_addr_t va,
size_t nBytes,
const uint8_t *bytes) = 0;
216 size_t n =
writeMemory(va,
sizeof(T), (
const uint8_t*)&value);
217 ASSERT_always_require(n ==
sizeof(T));
Records and replays traces.
void append(const Label &label)
Append a label to a trace.
Sawyer::Container::Trace< rose_addr_t > trace(ThreadId tid, Filter &filter)
Run the program and return an execution trace.
virtual void executionAddress(ThreadId, rose_addr_t)
Execution address.
virtual void setBreakPoint(const AddressInterval &)=0
Set breakpoints.
void writeMemory(rose_addr_t va, const T &value)
Write subordinate memory.
bool isSet(Enum e) const
Test whether a bit is set.
Main namespace for the ROSE library.
Stores a vector of enum bit flags.
virtual Sawyer::Container::Trace< rose_addr_t > trace()
Run the program and return an execution trace.
const size_t UNLIMITED(static_cast< size_t >(-1))
Effictively unlimited size.
Reject the current address, not appending it to the trace.
virtual std::string howTerminated()=0
String describing how the subordinate process terminated.
virtual bool isAttached()=0
Tests whether this debugger is attached to a specimen.
virtual Disassembler::BasePtr disassembler()
Property: Disassembler.
virtual void singleStep(ThreadId)=0
Execute one machine instruction.
Abort tracing, either appending or rejecting the current address.
virtual void writeAllRegisters(ThreadId, const Sawyer::Container::BitVector &)=0
Write all registers as a single bit vector.
Describes (part of) a physical CPU register.
virtual std::string readCString(rose_addr_t va, size_t maxBytes=UNLIMITED)
Read C-style NUL-terminated string from subordinate.
virtual size_t readMemory(rose_addr_t va, size_t nBytes, uint8_t *buffer)=0
Read subordinate memory.
virtual bool isTerminated()=0
Returns true if the subordinate terminated.
virtual void detach()=0
Detach from a specimen.
virtual Sawyer::Container::BitVector readAllRegisters(ThreadId)=0
Read all available register values as a single bit vector.
bool isClear(Enum e) const
Test whether a bit is clear.
virtual Sawyer::Container::BitVector readRegister(ThreadId, RegisterDescriptor)=0
Read subordinate register.
virtual std::string registerName(RegisterDescriptor)
Convert a register descriptor to a register name.
Base class for reference counted objects.
virtual void terminate()=0
Terminate the specimen.
virtual void clearBreakPoints()=0
Remove all breakpoints.
virtual RegisterDictionaryPtr registerDictionary()
Register dictionary for the architecture.
virtual size_t writeMemory(rose_addr_t va, size_t nBytes, const uint8_t *bytes)=0
Writes some bytes to subordinate memory.
virtual void writeRegister(ThreadId, RegisterDescriptor, const Sawyer::Container::BitVector &)=0
Write subordinate register.
virtual std::vector< ThreadId > threadIds()=0
List of subordinate threads.
virtual void runToBreakPoint(ThreadId)=0
Run until the next breakpoint is reached.
Base class for debuggers.
virtual void clearBreakPoint(const AddressInterval &)=0
Remove breakpoints.