辨析地址映射和虚存映射
时间: 2024-04-07 11:32:58 浏览: 21
地址映射和虚存映射都是计算机内存管理中的概念,但是它们所针对的不同层次也是不同的。
地址映射是指将逻辑地址转化为物理地址的过程。在计算机中,CPU生成的地址是逻辑地址,而物理地址则是实际的内存地址。通过地址映射,操作系统将逻辑地址转化为物理地址,使得程序能够正确地访问内存。
虚存映射则是一种技术,它将磁盘上的数据映射到内存中,以便程序能够更快地访问数据。虚存映射通过将内存分为一系列虚拟页,每个虚拟页大小相同,一般为4KB或8KB,并将虚拟页映射到物理内存或磁盘上的某个位置。当程序需要访问一个虚拟页时,操作系统会将其映射到物理内存或磁盘上的对应位置,以便程序能够访问数据。这样可以大大提高程序访问数据的效率。
所以,地址映射和虚存映射都是内存管理中的重要概念,但是它们所针对的层次不同,地址映射是将逻辑地址映射为物理地址,而虚存映射是将磁盘上的数据映射到内存中。
相关问题
地址映射【对比 虚存映射】 理解从虚拟地址到物理地址的全过程
在计算机中,程序在运行时会产生许多虚拟地址,这些虚拟地址需要通过地址映射(或者叫内存映射)的方式转换成物理地址,最终访问计算机的内存。虚拟地址和物理地址的映射过程如下:
1. 程序在运行时产生虚拟地址,这些地址是由程序员定义的,是与实际物理地址无关的。
2. 当程序访问这些虚拟地址时,操作系统会将其映射成物理地址,从而访问计算机的内存。
3. 在地址映射的过程中,操作系统会维护一个页表,用于记录虚拟地址到物理地址的映射关系。
4. 当程序访问虚拟地址时,操作系统会将其分解成页号和页内偏移量,再根据页号在页表中查找对应的物理地址。
5. 如果页表中没有对应的物理地址,则会发生缺页中断,操作系统会从磁盘中加载对应的页面到内存中,并更新页表中的映射关系。
虚存映射和地址映射的过程类似,都是将虚拟地址映射成物理地址。虚存映射是指在磁盘上建立一个虚拟内存空间,程序访问虚拟地址时,操作系统会将其映射到虚拟内存空间中,如果虚拟内存空间中没有对应的数据,则会发生缺页中断,操作系统会将数据从磁盘中加载到虚拟内存空间中。虚存映射的目的是扩展计算机的内存容量,使得程序可以访问比物理内存更大的空间。
怎么打开可执行文件的进程映射虚存空间
要打开可执行文件的进程映射虚存空间,可以使用操作系统提供的函数来实现。在 Windows 系统中,可以使用 CreateProcess 函数创建一个新的进程,该函数会返回一个 PROCESS_INFORMATION 结构体,其中包含了新进程的句柄和标识符。然后可以使用 VirtualAllocEx 函数在新进程的虚拟地址空间中分配一段内存,并使用 WriteProcessMemory 函数将可执行文件的内容写入该内存中。最后,可以使用 CreateRemoteThread 函数在新进程中执行可执行文件的代码。
以下是一个简单的示例代码,演示了如何打开可执行文件的进程映射虚存空间:
```C++
#include <windows.h>
#include <stdio.h>
int main(int argc, char* argv[])
{
if (argc < 2) {
printf("Usage: %s <executable>\n", argv[0]);
return 1;
}
// 创建新进程
PROCESS_INFORMATION pi;
STARTUPINFO si = { sizeof(si) };
if (!CreateProcess(argv[1], NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
printf("Failed to create process: %d\n", GetLastError());
return 1;
}
// 在新进程中分配内存
LPVOID remoteMem = VirtualAllocEx(pi.hProcess, NULL, 4096, MEM_COMMIT, PAGE_READWRITE);
if (!remoteMem) {
printf("Failed to allocate memory in remote process: %d\n", GetLastError());
return 1;
}
// 将可执行文件的内容写入新进程的内存
HANDLE hFile = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
printf("Failed to open file: %d\n", GetLastError());
return 1;
}
DWORD fileSize = GetFileSize(hFile, NULL);
if (!fileSize) {
printf("File is empty\n");
return 1;
}
LPVOID localMem = VirtualAlloc(NULL, fileSize, MEM_COMMIT, PAGE_READWRITE);
if (!localMem) {
printf("Failed to allocate memory for file: %d\n", GetLastError());
return 1;
}
DWORD bytesRead;
if (!ReadFile(hFile, localMem, fileSize, &bytesRead, NULL) || bytesRead != fileSize) {
printf("Failed to read file: %d\n", GetLastError());
return 1;
}
if (!WriteProcessMemory(pi.hProcess, remoteMem, localMem, fileSize, NULL)) {
printf("Failed to write memory in remote process: %d\n", GetLastError());
return 1;
}
CloseHandle(hFile);
VirtualFree(localMem, 0, MEM_RELEASE);
// 在新进程中执行可执行文件的代码
HANDLE hThread = CreateRemoteThread(pi.hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)remoteMem, NULL, 0, NULL);
if (!hThread) {
printf("Failed to create remote thread: %d\n", GetLastError());
return 1;
}
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
// 清理资源
VirtualFreeEx(pi.hProcess, remoteMem, 0, MEM_RELEASE);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
return 0;
}
```
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)