1 #ifndef ROSE_MemoryMap_H
2 #define ROSE_MemoryMap_H
5 #include <boost/shared_ptr.hpp>
8 #define ALIGN_UP(ADDR,ALMNT) ((((ADDR)+(ALMNT)-1)/(ALMNT))*(ALMNT))
11 #define ALIGN_DN(ADDR,ALMNT) (((ADDR)/(ALMNT))*(ALMNT))
107 typedef boost::shared_ptr<Buffer>
BufferPtr;
121 virtual BufferPtr
clone()
const = 0;
151 virtual size_t read(
void *buf,
size_t offset,
size_t nbytes)
const = 0;
156 virtual size_t write(
const void *buf,
size_t offset,
size_t nbytes) = 0;
160 virtual void save(
const std::string &filename)
const;
191 virtual size_t read(
void*,
size_t offset,
size_t nbytes)
const {
return 0; }
192 virtual size_t write(
const void*,
size_t offset,
size_t nbytes) {
return 0; }
206 static BufferPtr
create(
void *data,
size_t size);
207 static BufferPtr
create(
const void *data,
size_t size);
210 virtual BufferPtr
clone()
const;
211 virtual void resize(
size_t n) ;
213 virtual size_t read(
void*,
size_t offset,
size_t nbytes)
const ;
214 virtual size_t write(
const void*,
size_t offset,
size_t nbytes) ;
232 static BufferPtr
create(
void *data,
size_t size);
236 static BufferPtr
create_from_file(
const std::string &filename,
size_t start_offset=0);
250 static BufferPtr
create(
size_t length,
int prot,
int flags,
int fd, off_t
offset);
256 static BufferPtr
create(
const std::string &filename,
int oflags,
int mprot,
int mflags);
259 virtual void resize(
size_t n) ;
275 virtual BufferPtr
clone() const ;
277 virtual
size_t read(
void*,
size_t offset,
size_t nbytes) const ;
278 virtual
size_t write(const
void*,
size_t offset,
size_t nbytes) ;
387 void print(std::ostream&)
const;
427 virtual std::string
leader(std::string dflt=
"memory map problem")
const;
428 virtual std::string
details(
bool)
const;
429 virtual void print(std::ostream&,
bool verbose=
true)
const;
444 new_range(new_range), old_range(old_range),
445 new_segment(new_segment), old_segment(old_segment) {}
447 virtual void print(std::ostream&,
bool verbose=
true)
const;
458 virtual void print(std::ostream&,
bool verbose=
true)
const;
468 virtual void print(std::ostream&,
bool verbose=
true)
const;
478 virtual void print(std::ostream&,
bool verbose=
true)
const;
498 init(other, copy_level);
535 size_t insert_file(
const std::string &filename,
rose_addr_t va,
bool writable=
false,
bool erase_prior=
true,
536 const std::string &sgmtname=
"");
544 bool exists(
Extent range,
unsigned required_perms=0)
const;
557 void erase(
const Segment&);
575 void traverse(Visitor &visitor)
const;
580 void prune(Visitor &predicate);
626 std::string
read_string(
rose_addr_t start_va,
size_t desired,
int(*valid_char)(
int)=NULL,
int(*invalid_char)(
int)=NULL,
655 void dump(FILE*,
const char *
prefix=
"")
const;
656 void dump(std::ostream&, std::string
prefix=
"")
const;
663 void dump(
const std::string &basename)
const;
687 bool load(
const std::string &basename);