LLDB
mainline
llvm-project
lldb
include
lldb
Utility
VirtualDataExtractor.h
Go to the documentation of this file.
1
//===----------------------------------------------------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_UTILITY_VIRTUALDATAEXTRACTOR_H
10
#define LLDB_UTILITY_VIRTUALDATAEXTRACTOR_H
11
12
#include "
lldb/Utility/DataExtractor.h
"
13
#include "
lldb/Utility/RangeMap.h
"
14
#include "
lldb/lldb-types.h
"
15
16
namespace
lldb_private
{
17
18
/// A DataExtractor subclass that allows reading data at virtual addresses
19
/// using a lookup table that maps virtual address ranges to physical offsets.
20
///
21
/// This class maintains a lookup table where each entry contains:
22
/// - base: starting virtual address for this entry
23
/// - size: size of this entry in bytes
24
/// - data: physical offset in the underlying data buffer
25
///
26
/// Reads are translated from virtual addresses to physical offsets using
27
/// this lookup table. Reads cannot cross entry boundaries and this is
28
/// enforced with assertions.
29
class
VirtualDataExtractor
:
public
DataExtractor
{
30
public
:
31
/// Type alias for the range map used internally.
32
/// Maps virtual addresses (base) to physical offsets (data).
33
using
LookupTable
=
34
RangeDataVector<lldb::offset_t, lldb::offset_t, lldb::offset_t>
;
35
36
VirtualDataExtractor
() =
default
;
37
38
VirtualDataExtractor
(
const
void
*data,
lldb::offset_t
data_length,
39
lldb::ByteOrder
byte_order, uint32_t addr_size,
40
LookupTable
lookup_table);
41
42
VirtualDataExtractor
(
const
lldb::DataBufferSP
&data_sp,
43
lldb::ByteOrder
byte_order, uint32_t addr_size,
44
LookupTable
lookup_table);
45
46
const
void
*
GetData
(
lldb::offset_t
*offset_ptr,
47
lldb::offset_t
length)
const override
;
48
49
const
uint8_t *
PeekData
(
lldb::offset_t
offset,
50
lldb::offset_t
length)
const override
;
51
52
/// Unchecked overrides
53
/// @{
54
uint8_t
GetU8_unchecked
(
lldb::offset_t
*offset_ptr)
const override
;
55
uint16_t
GetU16_unchecked
(
lldb::offset_t
*offset_ptr)
const override
;
56
uint32_t
GetU32_unchecked
(
lldb::offset_t
*offset_ptr)
const override
;
57
uint64_t
GetU64_unchecked
(
lldb::offset_t
*offset_ptr)
const override
;
58
/// @}
59
60
protected
:
61
/// Find the lookup entry that contains the given virtual address.
62
const
LookupTable::Entry
*
FindEntry
(
lldb::offset_t
virtual_addr)
const
;
63
64
/// Validate that a read at a virtual address is within bounds and
65
/// does not cross entry boundaries.
66
bool
ValidateVirtualRead
(
lldb::offset_t
virtual_addr,
67
lldb::offset_t
length)
const
;
68
69
private
:
70
LookupTable
m_lookup_table
;
71
};
72
73
}
// namespace lldb_private
74
75
#endif
// LLDB_UTILITY_VIRTUALDATAEXTRACTOR_H
DataExtractor.h
RangeMap.h
lldb_private::DataExtractor::DataExtractor
DataExtractor()
Default constructor.
Definition
DataExtractor.cpp:123
lldb_private::DataExtractor::GetData
llvm::ArrayRef< uint8_t > GetData() const
Definition
DataExtractor.h:985
lldb_private::RangeDataVector
Definition
RangeMap.h:459
lldb_private::RangeDataVector< lldb::offset_t, lldb::offset_t, lldb::offset_t >::Entry
RangeData< lldb::offset_t, lldb::offset_t, lldb::offset_t > Entry
Definition
RangeMap.h:462
lldb_private::VirtualDataExtractor::VirtualDataExtractor
VirtualDataExtractor()=default
lldb_private::VirtualDataExtractor::GetU32_unchecked
uint32_t GetU32_unchecked(lldb::offset_t *offset_ptr) const override
Definition
VirtualDataExtractor.cpp:119
lldb_private::VirtualDataExtractor::FindEntry
const LookupTable::Entry * FindEntry(lldb::offset_t virtual_addr) const
Find the lookup entry that contains the given virtual address.
Definition
VirtualDataExtractor.cpp:35
lldb_private::VirtualDataExtractor::ValidateVirtualRead
bool ValidateVirtualRead(lldb::offset_t virtual_addr, lldb::offset_t length) const
Validate that a read at a virtual address is within bounds and does not cross entry boundaries.
Definition
VirtualDataExtractor.cpp:40
lldb_private::VirtualDataExtractor::PeekData
const uint8_t * PeekData(lldb::offset_t offset, lldb::offset_t length) const override
Peek at a bytes at offset.
Definition
VirtualDataExtractor.cpp:83
lldb_private::VirtualDataExtractor::GetU8_unchecked
uint8_t GetU8_unchecked(lldb::offset_t *offset_ptr) const override
Unchecked overrides.
Definition
VirtualDataExtractor.cpp:97
lldb_private::VirtualDataExtractor::GetU64_unchecked
uint64_t GetU64_unchecked(lldb::offset_t *offset_ptr) const override
Definition
VirtualDataExtractor.cpp:130
lldb_private::VirtualDataExtractor::LookupTable
RangeDataVector< lldb::offset_t, lldb::offset_t, lldb::offset_t > LookupTable
Type alias for the range map used internally.
Definition
VirtualDataExtractor.h:33
lldb_private::VirtualDataExtractor::m_lookup_table
LookupTable m_lookup_table
Definition
VirtualDataExtractor.h:70
lldb_private::VirtualDataExtractor::GetU16_unchecked
uint16_t GetU16_unchecked(lldb::offset_t *offset_ptr) const override
Definition
VirtualDataExtractor.cpp:108
lldb-types.h
lldb_private
A class that represents a running process on the host machine.
Definition
SBAddressRange.h:14
lldb::offset_t
uint64_t offset_t
Definition
lldb-types.h:85
lldb::ByteOrder
ByteOrder
Byte ordering definitions.
Definition
lldb-enumerations.h:144
lldb::DataBufferSP
std::shared_ptr< lldb_private::DataBuffer > DataBufferSP
Definition
lldb-forward.h:342
Generated on
for LLDB by
1.14.0