|  | // Copyright 2020 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_IOS_MODULE_SNAPSHOT_IOS_H_ | 
|  | #define CRASHPAD_SNAPSHOT_IOS_MODULE_SNAPSHOT_IOS_H_ | 
|  |  | 
|  | #include <mach-o/dyld_images.h> | 
|  | #include <stdint.h> | 
|  | #include <sys/types.h> | 
|  |  | 
|  | #include <map> | 
|  | #include <string> | 
|  | #include <vector> | 
|  |  | 
|  | #include "base/macros.h" | 
|  | #include "client/crashpad_info.h" | 
|  | #include "snapshot/crashpad_info_client_options.h" | 
|  | #include "snapshot/module_snapshot.h" | 
|  | #include "util/misc/initialization_state_dcheck.h" | 
|  |  | 
|  | namespace crashpad { | 
|  | namespace internal { | 
|  |  | 
|  | //! \brief A ModuleSnapshot of a code module (binary image) loaded into a | 
|  | //!     running (or crashed) process on an iOS system. | 
|  | class ModuleSnapshotIOS final : public ModuleSnapshot { | 
|  | public: | 
|  | ModuleSnapshotIOS(); | 
|  | ~ModuleSnapshotIOS() override; | 
|  |  | 
|  | // TODO(justincohen): This function is temporary, and will be broken into two | 
|  | // parts.  One to do an in-process dump of all the relevant information, and | 
|  | // two to initialize the snapshot after the in-process dump is loaded. | 
|  | //! \brief Initializes the object. | 
|  | //! | 
|  | //! \param[in] image The mach-o image to be loaded. | 
|  | //! | 
|  | //! \return `true` if the snapshot could be created. | 
|  | bool Initialize(const dyld_image_info* image); | 
|  |  | 
|  | // TODO(justincohen): This function is temporary, and will be broken into two | 
|  | // parts.  One to do an in-process dump of all the relevant information, and | 
|  | // two to initialize the snapshot after the in-process dump is loaded. | 
|  | //! \brief Initializes the object specifically for the dyld module. | 
|  | //! | 
|  | //! \param[in] images The structure containing the necessary dyld information. | 
|  | //! | 
|  | //! \return `true` if the snapshot could be created. | 
|  | bool InitializeDyld(const dyld_all_image_infos* images); | 
|  |  | 
|  | //! \brief Returns options from the module’s CrashpadInfo structure. | 
|  | //! | 
|  | //! \param[out] options Options set in the module’s CrashpadInfo structure. | 
|  | void GetCrashpadOptions(CrashpadInfoClientOptions* options); | 
|  |  | 
|  | static const dyld_all_image_infos* DyldAllImageInfo(); | 
|  |  | 
|  | // ModuleSnapshot: | 
|  | std::string Name() const override; | 
|  | uint64_t Address() const override; | 
|  | uint64_t Size() const override; | 
|  | time_t Timestamp() const override; | 
|  | void FileVersion(uint16_t* version_0, | 
|  | uint16_t* version_1, | 
|  | uint16_t* version_2, | 
|  | uint16_t* version_3) const override; | 
|  | void SourceVersion(uint16_t* version_0, | 
|  | uint16_t* version_1, | 
|  | uint16_t* version_2, | 
|  | uint16_t* version_3) const override; | 
|  | ModuleType GetModuleType() const override; | 
|  | void UUIDAndAge(UUID* uuid, uint32_t* age) const override; | 
|  | std::string DebugFileName() const override; | 
|  | std::vector<uint8_t> BuildID() const override; | 
|  | std::vector<std::string> AnnotationsVector() const override; | 
|  | std::map<std::string, std::string> AnnotationsSimpleMap() const override; | 
|  | std::vector<AnnotationSnapshot> AnnotationObjects() const override; | 
|  | std::set<CheckedRange<uint64_t>> ExtraMemoryRanges() const override; | 
|  | std::vector<const UserMinidumpStream*> CustomMinidumpStreams() const override; | 
|  |  | 
|  | private: | 
|  | // Gather the the module information based off of a mach_header_64 |address_|. | 
|  | bool FinishInitialization(); | 
|  |  | 
|  | std::string name_; | 
|  | uint64_t address_; | 
|  | uint64_t size_; | 
|  | time_t timestamp_; | 
|  | uint32_t dylib_version_; | 
|  | uint64_t source_version_; | 
|  | uint32_t filetype_; | 
|  | UUID uuid_; | 
|  | InitializationStateDcheck initialized_; | 
|  |  | 
|  | DISALLOW_COPY_AND_ASSIGN(ModuleSnapshotIOS); | 
|  | }; | 
|  |  | 
|  | }  // namespace internal | 
|  | }  // namespace crashpad | 
|  |  | 
|  | #endif  // CRASHPAD_SNAPSHOT_IOS_MODULE_SNAPSHOT_IOS_H_ |