KernelMemory 是 ZerOS 内核的动态数据存储接口,提供统一的数据存取接口,管理所有内核模块的动态数据。所有数据存储在 Exploit 程序(PID 10000)的内存中。
MemoryManager - 内存管理器(用于内存分配)Heap - 堆内存(用于数据存储)Shed - 栈内存(用于地址映射)KernelMemory.EXPLOIT_PID = 10000; // Exploit 程序固定 PID
KernelMemory.EXPLOIT_HEAP_ID = 1; // Exploit 堆 ID
KernelMemory.EXPLOIT_SHED_ID = 1; // Exploit 栈 ID
KernelMemory.EXPLOIT_HEAP_SIZE = 1048576; // 1MB Heap 用于存储内核数据
saveData(key, data)保存数据到 Exploit 内存。
参数:
key (string): 数据键名data (*): 要保存的数据(会被序列化为 JSON)返回值: boolean - 是否成功
示例:
// 保存简单数据
KernelMemory.saveData('MY_KEY', { name: 'value' });
// 保存复杂数据
KernelMemory.saveData('CONFIG', {
setting1: true,
setting2: 'value',
items: [1, 2, 3]
});
loadData(key)从 Exploit 内存加载数据。
参数:
key (string): 数据键名返回值: *|null - 加载的数据或 null
示例:
// 加载数据
const data = KernelMemory.loadData('MY_KEY');
if (data) {
console.log(data.name);
}
hasData(key)检查数据是否存在。
参数:
key (string): 数据键名返回值: boolean - 是否存在
示例:
if (KernelMemory.hasData('MY_KEY')) {
const data = KernelMemory.loadData('MY_KEY');
}
deleteData(key)删除数据。
参数:
key (string): 数据键名返回值: boolean - 是否成功
示例:
KernelMemory.deleteData('MY_KEY');
getMemoryUsage()获取内存使用情况。
返回值: Object - 内存使用情况对象
{
available: boolean, // 内存是否可用
heapSize: number, // 堆总大小(字节)
heapUsed: number, // 堆已使用(字节)
heapFree: number // 堆空闲(字节)
}
示例:
const usage = KernelMemory.getMemoryUsage();
console.log(`堆使用: ${usage.heapUsed} / ${usage.heapSize}`);
console.log(`堆空闲: ${usage.heapFree}`);
所有内核动态数据使用统一的键名规范:
| 键名 | 说明 | 示例 |
|------|------|------|
| APPLICATION_SOP | 应用程序分区管理表 | 存储所有进程的内存分区信息 |
| PROGRAM_NAMES | 程序名称映射 | Map<pid, programName> |
| PROCESS_TABLE | 进程表 | 存储所有进程信息 |
| NEXT_PID | 下一个 PID | 进程 ID 计数器 |
| NEXT_HEAP_ID | 下一个堆 ID | 堆 ID 计数器 |
| NEXT_SHED_ID | 下一个栈 ID | 栈 ID 计数器 |
| DISK_SEPARATE_MAP | 磁盘分区映射表 | 分区名称列表 |
| DISK_SEPARATE_SIZE | 磁盘分区大小映射表 | Map<partitionName, size> |
| DISK_FREE_MAP | 磁盘空闲区映射表 | Map<partitionName, freeSize> |
| DISK_USED_MAP | 磁盘已用区映射表 | Map<partitionName, usedSize> |
| DISK_CAN_USED | 磁盘可用状态 | boolean |
// 保存配置
const config = {
theme: 'dark',
language: 'zh-CN',
fontSize: 14
};
KernelMemory.saveData('USER_CONFIG', config);
// 加载配置
const loadedConfig = KernelMemory.loadData('USER_CONFIG');
if (loadedConfig) {
console.log(`主题: ${loadedConfig.theme}`);
}
if (KernelMemory.hasData('USER_CONFIG')) {
const config = KernelMemory.loadData('USER_CONFIG');
// 使用配置
} else {
// 使用默认配置
const defaultConfig = { theme: 'light' };
KernelMemory.saveData('USER_CONFIG', defaultConfig);
}
// 删除用户配置
KernelMemory.deleteData('USER_CONFIG');
// 检查内存使用情况
const usage = KernelMemory.getMemoryUsage();
if (usage.available) {
const usagePercent = (usage.heapUsed / usage.heapSize) * 100;
console.log(`内存使用率: ${usagePercent.toFixed(2)}%`);
if (usagePercent > 80) {
console.warn('内存使用率过高,建议清理数据');
}
}
resourceLinkArea 中保存地址和大小信息resourceLinkArea 中读取地址信息