After tested under windows.
[dyninst.git] / patchAPI / h / AddrSpace.h
1
2 /* Plugin Interface */
3
4 #ifndef PATCHAPI_H_ADDRSPACE_H_
5 #define PATCHAPI_H_ADDRSPACE_H_
6
7 #include "common.h"
8
9 namespace Dyninst {
10 namespace PatchAPI {
11
12 /* Interface specification for the interation between a PatchMgr and
13    the address space */
14
15 class AddrSpace : public dyn_detail::boost::enable_shared_from_this<AddrSpace>{
16     friend class PatchMgr;
17     friend class PatchFunction;
18
19   public:
20     PATCHAPI_EXPORT static AddrSpacePtr create(PatchObject* obj);
21     PATCHAPI_EXPORT virtual ~AddrSpace();
22
23     // Write data in mutatee's address space
24     PATCHAPI_EXPORT virtual bool write(PatchObject* /*obj*/, Address /*to*/,
25                                        Address /*from*/, size_t /*size*/);
26
27     // Memory allocation / reallocation / deallocation in mutatee's addressSpace
28     PATCHAPI_EXPORT virtual Address malloc(PatchObject* /*obj*/, size_t /*size*/,
29                                            Address /*near*/);
30
31     PATCHAPI_EXPORT virtual bool realloc(PatchObject* /*obj*/, Address /*orig*/,
32                                          size_t /*size*/);
33
34     PATCHAPI_EXPORT virtual bool free(PatchObject* /*obj*/, Address /*orig*/);
35
36     // Load a binary oject into the address space
37     PATCHAPI_EXPORT virtual bool loadObject(PatchObject* obj);
38
39     // Getters
40     typedef std::set<PatchObject*> ObjSet;
41     PATCHAPI_EXPORT ObjSet& objSet() { return obj_set_; }
42     PATCHAPI_EXPORT PatchObject* getFirstObject() { return first_object_; }
43     PATCHAPI_EXPORT PatchMgrPtr mgr() { return mgr_; }
44
45   protected:
46     ObjSet obj_set_;
47     PatchObject* first_object_;
48     PatchMgrPtr mgr_;
49
50     PATCHAPI_EXPORT bool init(PatchObject*);
51     AddrSpace() {}
52     explicit AddrSpace(AddrSpacePtr) {}
53 };
54
55 }
56 }
57
58 #endif /* PATCHAPI_H_ADDRSPACE_H_ */