gpt4 book ai didi

c++ - Win32 WriteProcessMemory() 神奇的偏移值

转载 作者:行者123 更新时间:2023-11-27 22:32:20 26 4
gpt4 key购买 nike

我正在尝试读取另一个进程拥有的 Win32 ListView 中的数据。不幸的是,我的 WriteProcessMemory() 调用失败并出现错误“此系统不支持此功能”。当我在 VirtualAlloc() 调用中为基地址指定“NULL”时。但是,如果我将 VirtualAlloc() 地址偏移了一些我很幸运并在沮丧时随机选择的“神奇”值,则该调用在我的系统上有效,但在其他系统上失败。 (见下面的代码)

谁能告诉我这个神奇的补偿对我有什么用?通过反复试验,我可以找到适用于特定系统的值,但我找不到该问题的通用解决方案。

谢谢,保罗H

#define MAGIC_OFFSET (DWORD)0x01020000

LVHITTESTINFO hti = { 0 };
hti.pt = clientPoint;

LPVOID lpBuffer = ::VirtualAlloc( NULL, 1, MEM_RESERVE, PAGE_READWRITE );
::VirtualFree( lpBuffer, 0, MEM_RELEASE );

lpBuffer = ::VirtualAlloc( (LPVOID)((DWORD)lpBuffer + MAGIC_OFFSET), sizeof( hti ), MEM_RESERVER, PAGE_READWRITE );
DWORD dwBuffer = (DWORD)lpBuffer + MAGIC_OFFSET - sizeof( hti );

if( !::WriteProcessMemory( hProcess, (LPVOID)dwBuffer, (LPVOID)&hti, sizeof( hti ), NULL ) )
return 0;

if( ListView_HitTest( hWndListView, (LPVOID)dwBuffer ) < 0 )
return 0;

if( !::ReadProcessMemory( hProcess, (LPVOID)dwBuffer, (LPVOID)&hti, sizeof( hti ), NULL ) )
return 0;

::VirtualFree( lpBuffer, 0, MEM_RELEASE );

说明(由 Cd-MaN 添加):这是在 Windows Mobile 平台上,可能是非 x86 架构。所以情况可能会有所不同(ARM处理器中是否有单独的地址空间?)。

最佳答案

与其尝试在另一个进程中分配内存,不如使用命名共享内存。本文将带您完成 shared memory 的基本设置。 ,我做了一个快速检查以确保 Windows Mobile 5 支持这些功能.

关于c++ - Win32 WriteProcessMemory() 神奇的偏移值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/281060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com