| OLD | NEW | 
|    1 // Copyright 2014 The Crashpad Authors. All rights reserved. |    1 // Copyright 2014 The Crashpad Authors. All rights reserved. | 
|    2 // |    2 // | 
|    3 // Licensed under the Apache License, Version 2.0 (the "License"); |    3 // Licensed under the Apache License, Version 2.0 (the "License"); | 
|    4 // you may not use this file except in compliance with the License. |    4 // you may not use this file except in compliance with the License. | 
|    5 // You may obtain a copy of the License at |    5 // You may obtain a copy of the License at | 
|    6 // |    6 // | 
|    7 //     http://www.apache.org/licenses/LICENSE-2.0 |    7 //     http://www.apache.org/licenses/LICENSE-2.0 | 
|    8 // |    8 // | 
|    9 // Unless required by applicable law or agreed to in writing, software |    9 // Unless required by applicable law or agreed to in writing, software | 
|   10 // distributed under the License is distributed on an "AS IS" BASIS, |   10 // distributed under the License is distributed on an "AS IS" BASIS, | 
|   11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |   11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|   12 // See the License for the specific language governing permissions and |   12 // See the License for the specific language governing permissions and | 
|   13 // limitations under the License. |   13 // limitations under the License. | 
|   14  |   14  | 
|   15 #include "util/mac/mach_o_image_symbol_table_reader.h" |   15 #include "snapshot/mac/mach_o_image_symbol_table_reader.h" | 
|   16  |   16  | 
|   17 #include <mach-o/loader.h> |   17 #include <mach-o/loader.h> | 
|   18 #include <mach-o/nlist.h> |   18 #include <mach-o/nlist.h> | 
|   19  |   19  | 
|   20 #include "base/memory/scoped_ptr.h" |   20 #include "base/memory/scoped_ptr.h" | 
|   21 #include "base/strings/stringprintf.h" |   21 #include "base/strings/stringprintf.h" | 
|   22 #include "util/mac/checked_mach_address_range.h" |   22 #include "util/mac/checked_mach_address_range.h" | 
|   23 #include "util/mach/task_memory.h" |   23 #include "util/mach/task_memory.h" | 
|   24  |   24  | 
|   25 namespace crashpad { |   25 namespace crashpad { | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
|   36 class MachOImageSymbolTableReaderInitializer { |   36 class MachOImageSymbolTableReaderInitializer { | 
|   37  public: |   37  public: | 
|   38   MachOImageSymbolTableReaderInitializer( |   38   MachOImageSymbolTableReaderInitializer( | 
|   39       ProcessReader* process_reader, |   39       ProcessReader* process_reader, | 
|   40       const MachOImageSegmentReader* linkedit_segment, |   40       const MachOImageSegmentReader* linkedit_segment, | 
|   41       const std::string& module_info) |   41       const std::string& module_info) | 
|   42       : module_info_(module_info), |   42       : module_info_(module_info), | 
|   43         linkedit_range_(), |   43         linkedit_range_(), | 
|   44         process_reader_(process_reader), |   44         process_reader_(process_reader), | 
|   45         linkedit_segment_(linkedit_segment) { |   45         linkedit_segment_(linkedit_segment) { | 
|   46     linkedit_range_.SetRange( |   46     linkedit_range_.SetRange(process_reader_->Is64Bit(), | 
|   47         process_reader_, linkedit_segment->Address(), linkedit_segment->Size()); |   47                              linkedit_segment->Address(), | 
 |   48                              linkedit_segment->Size()); | 
|   48     DCHECK(linkedit_range_.IsValid()); |   49     DCHECK(linkedit_range_.IsValid()); | 
|   49   } |   50   } | 
|   50  |   51  | 
|   51   ~MachOImageSymbolTableReaderInitializer() {} |   52   ~MachOImageSymbolTableReaderInitializer() {} | 
|   52  |   53  | 
|   53   //! \brief Reads the symbol table from another process. |   54   //! \brief Reads the symbol table from another process. | 
|   54   //! |   55   //! | 
|   55   //! \sa MachOImageSymbolTableReader::Initialize() |   56   //! \sa MachOImageSymbolTableReader::Initialize() | 
|   56   bool Initialize(const process_types::symtab_command* symtab_command, |   57   bool Initialize(const process_types::symtab_command* symtab_command, | 
|   57                   const process_types::dysymtab_command* dysymtab_command, |   58                   const process_types::dysymtab_command* dysymtab_command, | 
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  191   //! \param[in] tag A string that identifies the range being checked. This is |  192   //! \param[in] tag A string that identifies the range being checked. This is | 
|  192   //!     used only for logging. |  193   //!     used only for logging. | 
|  193   //! |  194   //! | 
|  194   //! \return `true` if the range identified by \a address + \a size lies |  195   //! \return `true` if the range identified by \a address + \a size lies | 
|  195   //!     entirely within the `__LINKEDIT` segment. `false` if that range is |  196   //!     entirely within the `__LINKEDIT` segment. `false` if that range is | 
|  196   //!     invalid, or if that range is not contained by the `__LINKEDIT` |  197   //!     invalid, or if that range is not contained by the `__LINKEDIT` | 
|  197   //!     segment, with an appropriate message logged. |  198   //!     segment, with an appropriate message logged. | 
|  198   bool IsInLinkEditSegment(mach_vm_address_t address, |  199   bool IsInLinkEditSegment(mach_vm_address_t address, | 
|  199                            mach_vm_size_t size, |  200                            mach_vm_size_t size, | 
|  200                            const char* tag) const { |  201                            const char* tag) const { | 
|  201     CheckedMachAddressRange subrange(process_reader_, address, size); |  202     CheckedMachAddressRange subrange(process_reader_->Is64Bit(), address, size); | 
|  202     if (!subrange.IsValid()) { |  203     if (!subrange.IsValid()) { | 
|  203       LOG(WARNING) << base::StringPrintf("invalid %s range (0x%llx + 0x%llx)", |  204       LOG(WARNING) << base::StringPrintf("invalid %s range (0x%llx + 0x%llx)", | 
|  204                                          tag, |  205                                          tag, | 
|  205                                          address, |  206                                          address, | 
|  206                                          size) << module_info_; |  207                                          size) << module_info_; | 
|  207       return false; |  208       return false; | 
|  208     } |  209     } | 
|  209  |  210  | 
|  210     if (!linkedit_range_.ContainsRange(subrange)) { |  211     if (!linkedit_range_.ContainsRange(subrange)) { | 
|  211       LOG(WARNING) << base::StringPrintf( |  212       LOG(WARNING) << base::StringPrintf( | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  265   INITIALIZATION_STATE_DCHECK_VALID(initialized_); |  266   INITIALIZATION_STATE_DCHECK_VALID(initialized_); | 
|  266  |  267  | 
|  267   const auto& iterator = external_defined_symbols_.find(name); |  268   const auto& iterator = external_defined_symbols_.find(name); | 
|  268   if (iterator == external_defined_symbols_.end()) { |  269   if (iterator == external_defined_symbols_.end()) { | 
|  269     return nullptr; |  270     return nullptr; | 
|  270   } |  271   } | 
|  271   return &iterator->second; |  272   return &iterator->second; | 
|  272 } |  273 } | 
|  273  |  274  | 
|  274 }  // namespace crashpad |  275 }  // namespace crashpad | 
| OLD | NEW |