在以挂起状态创建进程并取消映射程序内存的代码中,我经常看到以下代码:
ZwUnmapViewOfSection(remoteProcessInfo->hProcess, static_cast<PVOID>(remoteImageBaseAddress))
根据MSDN文档,ZwUnmapViewOfSection
取消映射包含remoteImageBaseAddress
的单个部分。
但是,PE二进制文件具有多个部分(.text
,.data
等),因此此调用不是仅取消映射其中的单个部分吗?
我想念什么?我也不明白为什么将remoteImageBaseAddress
(基地址)作为参数,因为该地址不属于.text
部分(可执行代码)。
答案 0 :(得分:0)
我认为您在PE文件部分和Windows的内存管理Section
类型对象之间感到困惑。
PE文件中的一部分只是原始数据,通常按其属性分类。
在Windows中,section
对象是一个内部内存管理对象,用于将磁盘上的物理文件映射到进程的虚拟地址空间。因此,当传递ZwUnmapViewOfSection
的映射文件(节)的地址时,它将从内核空间和进程的地址空间中删除节对象(也称为映射文件)。它不会更改实际PE文件的部分。
希望您现在明白了。