X86环境下获取PEB地址与ProcessHacker存在0x1000差值的疑问
X86平台PEB地址偏移0x1000的原因解析
- 核心原因是Windows X86系统的PEB内存布局设计:TEB中存储的PEB指针并非真实基址,而是真实基址加上
0x1000(一个页的大小) - ProcessHacker显示的是PEB的真实基址,而你通过TEB偏移(
0x30处)读取到的是带0x1000偏移的地址 - 两个地址都能正常读取PEB结构的原因:Windows会在PEB真实基址前方预留一个
0x1000大小的保护页,该页与PEB所在页的内存属性连续且可访问。当你从偏移0x1000的地址开始使用PEB结构偏移访问时,刚好对应到真实PEB的各个字段(相当于结构起始点后移0x1000,但内部偏移仍能正确命中目标数据) - X64系统无此设计,TEB的
0x60偏移处直接存储PEB真实基址,因此获取的地址与ProcessHacker显示一致
内容的提问来源于stack exchange,提问作者Arsium
相关产品推荐
相关产品推荐

