1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_DEBUG_PROC_MAPS_LINUX_H_ 6 #define BASE_DEBUG_PROC_MAPS_LINUX_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/base_export.h" 12 #include "base/basictypes.h" 13 14 namespace base { 15 namespace debug { 16 17 // Describes a region of mapped memory and the path of the file mapped. 18 struct MappedMemoryRegion { 19 enum Permission { 20 READ = 1 << 0, 21 WRITE = 1 << 1, 22 EXECUTE = 1 << 2, 23 PRIVATE = 1 << 3, // If set, region is private, otherwise it is shared. 24 }; 25 26 // The address range [start,end) of mapped memory. 27 uintptr_t start; 28 uintptr_t end; 29 30 // Byte offset into |path| of the range mapped into memory. 31 unsigned long long offset; 32 33 // Bitmask of read/write/execute/private/shared permissions. 34 uint8 permissions; 35 36 // Name of the file mapped into memory. 37 // 38 // NOTE: path names aren't guaranteed to point at valid files. For example, 39 // "[heap]" and "[stack]" are used to represent the location of the process' 40 // heap and stack, respectively. 41 std::string path; 42 }; 43 44 // Reads the data from /proc/self/maps and stores the result in |proc_maps|. 45 // Returns true if successful, false otherwise. 46 BASE_EXPORT bool ReadProcMaps(std::string* proc_maps); 47 48 // Parses /proc/<pid>/maps input data and stores in |regions|. Returns true 49 // and updates |regions| if and only if all of |input| was successfully parsed. 50 BASE_EXPORT bool ParseProcMaps(const std::string& input, 51 std::vector<MappedMemoryRegion>* regions); 52 53 } // namespace debug 54 } // namespace base 55 56 #endif // BASE_DEBUG_PROC_MAPS_LINUX_H_ 57