safe_memory_reader.h 943 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #pragma once
  2. #include "public.h"
  3. namespace NYT {
  4. ////////////////////////////////////////////////////////////////////////////////
  5. //! Enables safe read-only access to the address space of the current process.
  6. /*!
  7. * Inaccessible memory locations will not cause any traps but rather report
  8. * failure via return value.
  9. */
  10. class TSafeMemoryReader
  11. {
  12. public:
  13. TSafeMemoryReader();
  14. TSafeMemoryReader(const TSafeMemoryReader&) = delete;
  15. ~TSafeMemoryReader();
  16. //! Attempts to read #value at address #addr.
  17. //! Returns |true| on success, |false| on failure.
  18. template <class T>
  19. bool Read(const void* addr, T* value);
  20. private:
  21. int FD_ = -1;
  22. bool ReadRaw(const void* addr, void* ptr, size_t size);
  23. };
  24. ////////////////////////////////////////////////////////////////////////////////
  25. } // namespace NYT
  26. #define SAFE_MEMORY_READER_INL_H_
  27. #include "safe_memory_reader-inl.h"
  28. #undef SAFE_MEMORY_READER_INL_H_