当给定PE基地址作为参数时,为什么ZwUnmapViewOfSection()取消映射整个过程的内存?

时间:2018-11-16 19:23:47

标签: c++ windows winapi

在以挂起状态创建进程并取消映射程序内存的代码中,我经常看到以下代码:

ZwUnmapViewOfSection(remoteProcessInfo->hProcess, static_cast<PVOID>(remoteImageBaseAddress))

根据MSDN文档,ZwUnmapViewOfSection取消映射包含remoteImageBaseAddress的单个部分。

但是,PE二进制文件具有多个部分(.text.data等),因此此调用不是仅取消映射其中的单个部分吗?

我想念什么?我也不明白为什么将remoteImageBaseAddress(基地址)作为参数,因为该地址不属于.text部分(可执行代码)。

1 个答案:

答案 0 :(得分:0)

我认为您在PE文件部分和Windows的内存管理Section类型对象之间感到困惑。

PE文件中的一部分只是原始数据,通常按其属性分类。

在Windows中,section对象是一个内部内存管理对象,用于将磁盘上的物理文件映射到进程的虚拟地址空间。因此,当传递ZwUnmapViewOfSection的映射文件(节)的地址时,它将从内核空间和进程的地址空间中删除节对象(也称为映射文件)。它不会更改实际PE文件的部分。

希望您现在明白了。