mirror of
https://github.com/chromium/crashpad.git
synced 2024-12-31 01:43:03 +08:00
4224be41d7
Bug: crashpad:30 Change-Id: Id2a6a1868103b0f4374816e58aab365a977b010d Reviewed-on: https://chromium-review.googlesource.com/508836 Reviewed-by: Joshua Peraza <jperaza@chromium.org> Commit-Queue: Joshua Peraza <jperaza@chromium.org>
88 lines
2.9 KiB
C++
88 lines
2.9 KiB
C++
// Copyright 2017 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_LINUX_ELF_SYMBOL_TABLE_READER_H_
|
|
#define CRASHPAD_SNAPSHOT_LINUX_ELF_SYMBOL_TABLE_READER_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <string>
|
|
|
|
#include "base/macros.h"
|
|
#include "util/linux/address_types.h"
|
|
#include "util/linux/process_memory_range.h"
|
|
|
|
namespace crashpad {
|
|
|
|
class ElfImageReader;
|
|
|
|
//! \brief A reader for symbol tables in ELF images mapped into another process.
|
|
class ElfSymbolTableReader {
|
|
public:
|
|
//! \brief Information about a symbol in a module's symbol table.
|
|
struct SymbolInformation {
|
|
//! \brief The address of the symbol as it exists in the symbol table, not
|
|
//! adjusted for any load bias.
|
|
LinuxVMAddress address;
|
|
|
|
//! \brief The size of the symbol.
|
|
LinuxVMSize size;
|
|
|
|
//! \brief The section index that the symbol definition is in relation to.
|
|
uint16_t shndx;
|
|
|
|
//! \brief Specifies the type of symbol. Possible values include
|
|
//! `STT_OBJECT`, `STT_FUNC`, etc.
|
|
uint8_t type;
|
|
|
|
//! \brief Specifies the default scope at which a symbol takes precedence.
|
|
//! Possible values include `STB_LOCAL`, `STB_GLOBAL`, `STB_WEAK`, or
|
|
//! OS/processor specific values.
|
|
uint8_t binding;
|
|
|
|
//! \brief Together with binding, can limit the visibility of a symbol to
|
|
//! the module that defines it. Possible values include `STV_DEFAULT`,
|
|
//! `STV_INTERNAL`, `STV_HIDDEN`, and `STV_PROTECTED`.
|
|
uint8_t visibility;
|
|
};
|
|
|
|
// TODO(jperaza): Support using .hash and .gnu.hash sections to improve symbol
|
|
// lookup.
|
|
ElfSymbolTableReader(const ProcessMemoryRange* memory,
|
|
ElfImageReader* elf_reader,
|
|
LinuxVMAddress address);
|
|
~ElfSymbolTableReader();
|
|
|
|
//! \brief Lookup information about a symbol.
|
|
//!
|
|
//! \param[in] name The name of the symbol to search for.
|
|
//! \param[out] info The symbol information, if found.
|
|
//! \return `true` if the symbol is found.
|
|
bool GetSymbol(const std::string& name, SymbolInformation* info);
|
|
|
|
private:
|
|
template <typename SymEnt>
|
|
bool ScanSymbolTable(const std::string& name, SymbolInformation* info);
|
|
|
|
const ProcessMemoryRange* const memory_; // weak
|
|
ElfImageReader* const elf_reader_; // weak
|
|
const LinuxVMAddress base_address_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(ElfSymbolTableReader);
|
|
};
|
|
|
|
} // namespace crashpad
|
|
|
|
#endif // CRASHPAD_SNAPSHOT_LINUX_ELF_SYMBOL_TABLE_READER_H_
|