mirror of
https://github.com/chromium/crashpad.git
synced 2025-03-09 14:06:33 +00:00
This change was partially scripted and partially done manually with vim regex + manually placing the deleted constructors. The script change looked for destructors in the public: section of a class, if that existed the deleted constructors would go before the destructor. For manual placement I looked for any constructor in the public: section of the corresponding class. If there wasn't one, then it would ideally have gone as the first entry except below enums, classes and typedefs. This may not have been perfect, but is hopefully good enough. Fingers crossed. #include "base/macros.h" is removed from files that don't use ignore_result, which is the only other thing defined in base/macros.h. Bug: chromium:1010217 Change-Id: I099526255a40b1ac1264904b4ece2f3f503c9418 Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/3171034 Reviewed-by: Mark Mentovai <mark@chromium.org> Commit-Queue: Peter Boström <pbos@chromium.org>
116 lines
4.5 KiB
C++
116 lines
4.5 KiB
C++
// Copyright 2015 The Crashpad Authors. All rights reserved.
|
||
//
|
||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
// you may not use this file except in compliance with the License.
|
||
// You may obtain a copy of the License at
|
||
//
|
||
// http://www.apache.org/licenses/LICENSE-2.0
|
||
//
|
||
// Unless required by applicable law or agreed to in writing, software
|
||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
// See the License for the specific language governing permissions and
|
||
// limitations under the License.
|
||
|
||
#ifndef CRASHPAD_SNAPSHOT_WIN_PROCESS_SUBRANGE_READER_WIN_H_
|
||
#define CRASHPAD_SNAPSHOT_WIN_PROCESS_SUBRANGE_READER_WIN_H_
|
||
|
||
#include <string>
|
||
|
||
#include "util/misc/initialization_state_dcheck.h"
|
||
#include "util/win/address_types.h"
|
||
#include "util/win/checked_win_address_range.h"
|
||
|
||
namespace crashpad {
|
||
|
||
class ProcessReaderWin;
|
||
|
||
//! \brief A wrapper for ProcessReaderWin that only allows a specific subrange
|
||
//! to be read from.
|
||
//!
|
||
//! This class is useful to restrict reads to a specific address range, such as
|
||
//! the address range occupied by a loaded module, or a specific section within
|
||
//! a module.
|
||
class ProcessSubrangeReader {
|
||
public:
|
||
ProcessSubrangeReader();
|
||
|
||
ProcessSubrangeReader(const ProcessSubrangeReader&) = delete;
|
||
ProcessSubrangeReader& operator=(const ProcessSubrangeReader&) = delete;
|
||
|
||
~ProcessSubrangeReader();
|
||
|
||
//! \brief Initializes the object.
|
||
//!
|
||
//! \param[in] process_reader A reader for a remote process.
|
||
//! \param[in] base The base address for the range that reads should be
|
||
//! restricted to.
|
||
//! \param[in] size The size of the range that reads should be restricted to.
|
||
//! \param[in] name The range’s name, a string to be used in logged messages.
|
||
//! This string is for diagnostic purposes.
|
||
//!
|
||
//! \return `true` on success, `false` on failure with a message logged. The
|
||
//! other methods in this class must not be called unless this method or
|
||
//! InitializeSubrange() has returned true.
|
||
bool Initialize(ProcessReaderWin* process_reader,
|
||
WinVMAddress base,
|
||
WinVMSize size,
|
||
const std::string& name);
|
||
|
||
//! \brief Initializes the object to a subrange of an existing
|
||
//! ProcessSubrangeReader.
|
||
//!
|
||
//! The subrange identified by \a base and \a size must be contained within
|
||
//! the subrange in \a that.
|
||
//!
|
||
//! \param[in] that The existing ProcessSubrangeReader to base the new object
|
||
//! on.
|
||
//! \param[in] base The base address for the range that reads should be
|
||
//! restricted to.
|
||
//! \param[in] size The size of the range that reads should be restricted to.
|
||
//! \param[in] sub_name A description of the subrange, which will be appended
|
||
//! to the \a name in \a that and used in logged messages. This string is
|
||
//! for diagnostic purposes.
|
||
//!
|
||
//! \return `true` on success, `false` on failure with a message logged. The
|
||
//! other methods in this class must not be called unless this method or
|
||
//! Initialize() has returned true.
|
||
bool InitializeSubrange(const ProcessSubrangeReader& that,
|
||
WinVMAddress base,
|
||
WinVMSize size,
|
||
const std::string& sub_name);
|
||
|
||
bool Is64Bit() const { return range_.Is64Bit(); }
|
||
WinVMAddress Base() const { return range_.Base(); }
|
||
WinVMAddress Size() const { return range_.Size(); }
|
||
const std::string& name() const { return name_; }
|
||
|
||
//! \brief Reads memory from the remote process.
|
||
//!
|
||
//! The range specified by \a address and \a size must be contained within
|
||
//! the range that this object is permitted to read.
|
||
//!
|
||
//! \param[in] address The address to read from.
|
||
//! \param[in] size The size of data to read, in bytes.
|
||
//! \param[out] into The buffer to read data into.
|
||
//!
|
||
//! \return `true` on success, `false` on failure with a message logged.
|
||
bool ReadMemory(WinVMAddress address, WinVMSize size, void* into) const;
|
||
|
||
private:
|
||
// Common helper for Initialize() and InitializeSubrange().
|
||
bool InitializeInternal(ProcessReaderWin* process_reader,
|
||
WinVMAddress base,
|
||
WinVMSize size,
|
||
const std::string& name);
|
||
|
||
std::string name_;
|
||
CheckedWinAddressRange range_;
|
||
ProcessReaderWin* process_reader_; // weak
|
||
InitializationStateDcheck initialized_;
|
||
};
|
||
|
||
} // namespace crashpad
|
||
|
||
#endif // CRASHPAD_SNAPSHOT_WIN_PROCESS_SUBRANGE_READER_WIN_H_
|