无法从地址打开映射文件
Can't open mapped file from address
我无法打开映射的内存。当我使用 OpenFileMappingA(( 时,它返回 NULL 和 GetLastError(( 返回 161 (ERROR_BAD_PATHNAME(。我使用以下代码:
MEMORY_BASIC_INFORMATION mbi = { 0 };
VirtualQuery(image->raw_data, &mbi, sizeof(mbi));
if (mbi.Protect & PAGE_EXECUTE_READWRITE)
ZeroMemory(image->raw_data, sizeof(IMAGE_DOS_HEADER) + sizeof(IMAGE_NT_HEADERS) + sizeof(IMAGE_SECTION_HEADER)* nt_header->FileHeader.NumberOfSections);
else if (mbi.Type & MEM_MAPPED)
{
char buffer[500];
size_t count = GetMappedFileNameA(GetCurrentProcess(), image->raw_data, buffer, sizeof(buffer));
HANDLE hMap = OpenFileMappingA(FILE_MAP_ALL_ACCESS, false, buffer);
std::cout << hMap << std::endl; //0x00000000
std::cout << GetLastError() << std::endl; //161
}
"我想在此位置编辑内存,但它具有PAGE_READONLY保护">
OpenFileMappingA与保护没有任何关系。
您需要使用 VirtualProtect(( 将该内存区域的保护更改为 PAGE_READWRITE (0x04(
DWORD curProtection = 0;
VirtualProtect(addr, len, PAGE_READWRITE, &curProtection);
//change the memory
//then restore old protection
VirtualProtect(toHook, len, curProtection, &curProtection);
相关文章:
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 写入映射文件
- 内存映射文件访问非常慢
- 我正在尝试创建一个C++映射,该映射在boost内存映射文件中具有向量值
- 无法从地址打开映射文件
- 为什么 du -sh 输出错误大小的内存映射文件
- 使用 mmap 映射文件中的不同段
- Growing Boost.使用单个写入器的进程间内存映射文件
- 调整窗口内存映射文件的大小,而不会使指针失效
- 映射文件中成员结构的地址
- 与从C++到C#的内存映射文件共享链式结构
- 在 C++ 和 C# 之间共享内存映射文件结构
- 如何使用 Boost 的"mapped_file_sink"类刷新内存映射文件?
- 使用Solaris 64位或Linux 32位到Linux 64位的内存映射文件
- 循环访问提升mapped_region/内存映射文件
- 使用 Win32/WINAPI 通过内存映射文件传输数据
- qtCreator 错误:无法映射文件,errno=22 文件用于架构x86_64?
- 复制存储在内存映射文件中的数组的一部分
- 用于读取输入文件的内存映射文件的安全
- 写入和读取映射文件C++