| 161 | }; |
| 162 | |
| 163 | class ProcessMemoryManager : public AbstractRemoteMemoryManager |
| 164 | { |
| 165 | // Constructors |
| 166 | public: |
| 167 | explicit ProcessMemoryManager(pid_t pid); |
| 168 | explicit ProcessMemoryManager(pid_t pid, const std::vector<VirtualMap>& vmaps); |
| 169 | |
| 170 | // Methods |
| 171 | ssize_t copyMemoryFromProcess(remote_addr_t addr, size_t size, void* dst) const override; |
| 172 | bool isAddressValid(remote_addr_t addr, const VirtualMap& map) const override; |
| 173 | |
| 174 | private: |
| 175 | // Data members |
| 176 | pid_t d_pid; |
| 177 | std::vector<VirtualMap> d_vmaps; |
| 178 | mutable LRUCache d_lru_cache; |
| 179 | mutable file_unique_ptr d_memfile; |
| 180 | |
| 181 | // Methods |
| 182 | ssize_t readChunk(remote_addr_t addr, size_t len, char* dst) const; |
| 183 | ssize_t readChunkDirect(remote_addr_t addr, size_t len, char* dst) const; |
| 184 | ssize_t readChunkThroughMemFile(remote_addr_t addr, size_t len, char* dst) const; |
| 185 | }; |
| 186 | |
| 187 | struct SimpleVirtualMap |
| 188 | { |
nothing calls this directly
no outgoing calls
no test coverage detected