读取堆栈我写的是固定大小.一次读取 250 字节.
之前一直都是正常的. 这次更新之后,换成了延迟加载模块后, 读取就失败了. 效果如下图:
CpuDbg 读取堆栈失败
调试分析发现, 是因为堆栈地址所在范围,已经属于页边界了. 因为我大小写的是固定 250 字节. 那样就超过页边界了, 调用 VirtualProtectEx 或者 ReadProcessMemory ,都会报错的.
解决办法也很简单. 调用 ODPlugin_Memory_Find 获取内存数据, 通过 当前内存的 内存基址(base)+内存大小(size) 再减去当前的 堆栈地址(address), 得到的就是 剩余的大小了.
最后再把当前得到的大小赋值给 250 所在变量即可. 修改后就读取正常了. 如下图:
CpuDbg 读取堆栈失败
|