server-processmemory 是 ZerOS 内置的进程堆内存读写服务,由 ServerExpansion 从 D/server 加载。服务启动后在 POOL > SERVER 中暴露 ProcessMemory 对象,供内存编辑器等工具读取/写入任意进程的堆内存。
processmemory(对应文件 server-processmemory.js)D/server/server-processmemory.js(项目内 system/service/DISK/D/server/server-processmemory.js)服务启动后,其他模块可通过 POOL.__GET__('SERVER', 'ProcessMemory') 获取 API:
| 方法 | 说明 |
|------|------|
| getProcessMemoryInfo(targetPid) | 获取指定进程的内存信息(堆列表等)。返回 checkMemory 单进程结果(programs[0])或 null。 |
| readProcessHeap(targetPid, heapId, start, length) | 读取指定进程指定堆的区间。heapId 可为数字或十六进制字符串(如 "0x1");start 为十进制偏移;length 默认 256。返回 [{ addr, data }, ...]。 |
| writeProcessHeap(targetPid, heapId, offset, data) | 向指定进程指定堆的偏移处写入一个单元。data 可为数字或单字符等。返回 boolean。 |
var PM = POOL.__GET__('SERVER', 'ProcessMemory');
if (!PM) return; // 服务未启动
var info = PM.getProcessMemoryInfo(10001);
var rows = PM.readProcessHeap(10001, '0x1', 0, 256);
var ok = PM.writeProcessHeap(10001, '0x1', 10, 0x41);
init() 扫描 D/server 并加载所有 server-*.js(含本服务),不依赖「是否打开系统服务管理程序」。程序调用 Server.start('processmemory') 时,内核会先等待服务列表加载完成再执行,因此不会出现「未知服务 processmemory」。POOL.__GET__('SERVER', 'ProcessMemory') 获取 API;若服务未启动,会提示「请先在服务管理器中启动 ProcessMemory 服务」,并可在用户确认后通过 kernelAPI.call('Server.start', ['processmemory']) 由程序拉起服务;退出时若本实例曾拉起服务,会通过 kernelAPI.call('Server.stop', ['processmemory']) 关闭。程序需声明 SERVER_SERVICE_MANAGE 权限。Server.start('processmemory') 启动时调用一次,打日志。SERVER > ProcessMemory,打日志。SERVER > ProcessMemory,打日志。serviceId、serviceName、version、running、poolExposed、poolCategory、poolKey、poolPath、usage。{ name: 'ProcessMemory', version: '1.0', description: '...' }。