|
sEMU
|
内存子系统抽象层 (Guest Memory Subsystem) 更多...
#include <mem.hpp>

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 | ( | size_t | base = 0x80000000, |
| size_t | sz = 128 * 1024 * 1024 ) |
构造函数:初始化内存子系统
| base | 架构物理内存的转换偏移量 (默认: 0x80000000) |
| sz | 线性物理地址空间大小限制 (默认: 128MB) |
|
default |
| uint8_t * guest_mem::get_host_ptr | ( | size_t | addr | ) |
获取指定架构地址映射的主机内存指针
| addr | 模拟的架构物理地址 |

|
inline |
判断地址是否可合法访问

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

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

| int8_t guest_mem::lb | ( | size_t | addr | ) |
Load Byte (Sign-extended)

| uint8_t guest_mem::lbu | ( | size_t | addr | ) |
Load Byte (Zero-extended)

| int64_t guest_mem::ld | ( | size_t | addr | ) |
Load Double-Word

| int16_t guest_mem::lh | ( | size_t | addr | ) |
Load Half-Word (Sign-extended)

| uint16_t guest_mem::lhu | ( | size_t | addr | ) |
Load Half-Word (Zero-extended)

| void guest_mem::load_binary | ( | size_t | load_addr, |
| const void * | ext_mem, | ||
| size_t | ext_size ) |
加载二进制数据 (如 payload) 到指定的架构物理地址
| load_addr | 欲装载的目标起始地址 |
| ext_mem | 指向包含外部数据缓冲区的指针 |
| ext_size | 需要加载的字节数 |


| int32_t guest_mem::lw | ( | size_t | addr | ) |
Load Word (Sign-extended)

| uint32_t guest_mem::lwu | ( | size_t | addr | ) |
Load Word (Zero-extended)

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


|
private |

|
private |

|
private |


|
private |


|
private |


|
private |


| uint8_t guest_mem::read_byte | ( | size_t | addr | ) |
读取单个字节的底层接口

| void guest_mem::sb | ( | size_t | addr, |
| uint8_t | val ) |
Store Byte

| void guest_mem::sd | ( | size_t | addr, |
| uint64_t | val ) |
Store Double-Word

| void guest_mem::sh | ( | size_t | addr, |
| uint16_t | val ) |
Store Half-Word

| void guest_mem::sw | ( | size_t | addr, |
| uint32_t | val ) |
Store Word

| void guest_mem::write_byte | ( | size_t | addr, |
| uint8_t | val ) |
写入单个字节的底层接口

|
private |
物理映射的架构起始地址
|
private |
底层扁平化存储空间
|
private |
预设的内存容量上限