sEMU
载入中...
搜索中...
未找到
guest_mem类 参考

内存子系统抽象层 (Guest Memory Subsystem) 更多...

#include <mem.hpp>

guest_mem 的协作图:
Collaboration graph

Public 成员函数

 guest_mem (size_t base=0x80000000, size_t sz=128 *1024 *1024)
 构造函数:初始化内存子系统
 ~guest_mem ()=default
bool in_pmem (size_t addr) const
 判断地址是否在架构物理内存 (PMEM) 范围内
bool in_mmio (size_t addr) const
 判断地址是否在设备 MMIO 范围内
bool in_bounds (size_t addr) const
 判断地址是否可合法访问
uint8_t * get_host_ptr (size_t addr)
 获取指定架构地址映射的主机内存指针
void load_binary (size_t load_addr, const void *ext_mem, size_t ext_size)
 加载二进制数据 (如 payload) 到指定的架构物理地址
int8_t lb (size_t addr)
 Load Byte (Sign-extended)
uint8_t lbu (size_t addr)
 Load Byte (Zero-extended)
int16_t lh (size_t addr)
 Load Half-Word (Sign-extended)
uint16_t lhu (size_t addr)
 Load Half-Word (Zero-extended)
int32_t lw (size_t addr)
 Load Word (Sign-extended)
uint32_t lwu (size_t addr)
 Load Word (Zero-extended)
int64_t ld (size_t addr)
 Load Double-Word
void sb (size_t addr, uint8_t val)
 Store Byte
void sh (size_t addr, uint16_t val)
 Store Half-Word
void sw (size_t addr, uint32_t val)
 Store Word
void sd (size_t addr, uint64_t val)
 Store Double-Word
uint8_t read_byte (size_t addr)
 读取单个字节的底层接口
void write_byte (size_t addr, uint8_t val)
 写入单个字节的底层接口
void mem_init ()
 使用硬编码测试序列初始化内存 (主要用于无参测试)

Private 成员函数

uint64_t paddr_read (size_t addr, int len)
void paddr_write (size_t addr, int len, uint64_t data)
uint64_t pmem_read (size_t addr, int len)
void pmem_write (size_t addr, int len, uint64_t data)
uint64_t mmio_read (size_t addr, int len)
void mmio_write (size_t addr, int len, uint64_t data)

Private 属性

std::vector< uint8_t > mem
 底层扁平化存储空间
size_t base_addr
 物理映射的架构起始地址
size_t size
 预设的内存容量上限

详细描述

内存子系统抽象层 (Guest Memory Subsystem)

为 ISA 架构模型提供线性物理内存操作(PMEM)和设备内存映射输入输出(MMIO)的支持。 同时支持高效加载外部程序(如 BIN 文件)到隔离的地址空间。

构造及析构函数说明

◆ guest_mem()

guest_mem::guest_mem ( size_t base = 0x80000000,
size_t sz = 128 * 1024 * 1024 )

构造函数:初始化内存子系统

参数
base架构物理内存的转换偏移量 (默认: 0x80000000)
sz线性物理地址空间大小限制 (默认: 128MB)

◆ ~guest_mem()

guest_mem::~guest_mem ( )
default

成员函数说明

◆ get_host_ptr()

uint8_t * guest_mem::get_host_ptr ( size_t addr)

获取指定架构地址映射的主机内存指针

参数
addr模拟的架构物理地址
返回
实际的主机内存指针
这是这个函数的调用关系图:

◆ in_bounds()

bool guest_mem::in_bounds ( size_t addr) const
inline

判断地址是否可合法访问

函数调用图:

◆ in_mmio()

bool guest_mem::in_mmio ( size_t addr) const
inline

判断地址是否在设备 MMIO 范围内

这是这个函数的调用关系图:

◆ in_pmem()

bool guest_mem::in_pmem ( size_t addr) const
inline

判断地址是否在架构物理内存 (PMEM) 范围内

这是这个函数的调用关系图:

◆ lb()

int8_t guest_mem::lb ( size_t addr)

Load Byte (Sign-extended)

函数调用图:

◆ lbu()

uint8_t guest_mem::lbu ( size_t addr)

Load Byte (Zero-extended)

函数调用图:

◆ ld()

int64_t guest_mem::ld ( size_t addr)

Load Double-Word

函数调用图:

◆ lh()

int16_t guest_mem::lh ( size_t addr)

Load Half-Word (Sign-extended)

函数调用图:

◆ lhu()

uint16_t guest_mem::lhu ( size_t addr)

Load Half-Word (Zero-extended)

函数调用图:

◆ load_binary()

void guest_mem::load_binary ( size_t load_addr,
const void * ext_mem,
size_t ext_size )

加载二进制数据 (如 payload) 到指定的架构物理地址

参数
load_addr欲装载的目标起始地址
ext_mem指向包含外部数据缓冲区的指针
ext_size需要加载的字节数
函数调用图:
这是这个函数的调用关系图:

◆ lw()

int32_t guest_mem::lw ( size_t addr)

Load Word (Sign-extended)

函数调用图:

◆ lwu()

uint32_t guest_mem::lwu ( size_t addr)

Load Word (Zero-extended)

函数调用图:

◆ mem_init()

void guest_mem::mem_init ( )

使用硬编码测试序列初始化内存 (主要用于无参测试)

函数调用图:
这是这个函数的调用关系图:

◆ mmio_read()

uint64_t guest_mem::mmio_read ( size_t addr,
int len )
private
这是这个函数的调用关系图:

◆ mmio_write()

void guest_mem::mmio_write ( size_t addr,
int len,
uint64_t data )
private
这是这个函数的调用关系图:

◆ paddr_read()

uint64_t guest_mem::paddr_read ( size_t addr,
int len )
private
函数调用图:
这是这个函数的调用关系图:

◆ paddr_write()

void guest_mem::paddr_write ( size_t addr,
int len,
uint64_t data )
private
函数调用图:
这是这个函数的调用关系图:

◆ pmem_read()

uint64_t guest_mem::pmem_read ( size_t addr,
int len )
private
函数调用图:
这是这个函数的调用关系图:

◆ pmem_write()

void guest_mem::pmem_write ( size_t addr,
int len,
uint64_t data )
private
函数调用图:
这是这个函数的调用关系图:

◆ read_byte()

uint8_t guest_mem::read_byte ( size_t addr)

读取单个字节的底层接口

函数调用图:

◆ sb()

void guest_mem::sb ( size_t addr,
uint8_t val )

Store Byte

函数调用图:

◆ sd()

void guest_mem::sd ( size_t addr,
uint64_t val )

Store Double-Word

函数调用图:

◆ sh()

void guest_mem::sh ( size_t addr,
uint16_t val )

Store Half-Word

函数调用图:

◆ sw()

void guest_mem::sw ( size_t addr,
uint32_t val )

Store Word

函数调用图:

◆ write_byte()

void guest_mem::write_byte ( size_t addr,
uint8_t val )

写入单个字节的底层接口

函数调用图:

类成员变量说明

◆ base_addr

size_t guest_mem::base_addr
private

物理映射的架构起始地址

◆ mem

std::vector<uint8_t> guest_mem::mem
private

底层扁平化存储空间

◆ size

size_t guest_mem::size
private

预设的内存容量上限


该类的文档由以下文件生成: