Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从不允许的应用程序读取内存_C++_Windows_Memory_Dump_Openprocess - Fatal编程技术网

C++ 从不允许的应用程序读取内存

C++ 从不允许的应用程序读取内存,c++,windows,memory,dump,openprocess,C++,Windows,Memory,Dump,Openprocess,我目前正在尝试读取一个游戏的全部内存,该游戏会阻止对OpenProcess和ReadProcessMemory的调用(我相信这是通过windows驱动程序/服务完成的,尽管我不确定如何实现) 我使用以下代码尝试打开进程并将其内存读取到文件: HANDLE process = OpenProcess(PROCESS_VM_READ, 0, pid); if (!process) { cout << "Failed to open process."; return 1;

我目前正在尝试读取一个游戏的全部内存,该游戏会阻止对
OpenProcess
ReadProcessMemory
的调用(我相信这是通过windows驱动程序/服务完成的,尽管我不确定如何实现)

我使用以下代码尝试打开进程并将其内存读取到文件:

HANDLE process = OpenProcess(PROCESS_VM_READ, 0, pid);
if (!process) {
    cout << "Failed to open process.";
    return 1;
}
cout << "Successfully opened processs." << endl << "Dumping memory to mem.dmp..." << endl;

ofstream fout;
fout.open("mem.dmp");

char *base = (char *)0;
char *readCount = (char *)0;
do {
    char buffer[PAGE_SIZE];

    if (ReadProcessMemory(process, base, buffer, PAGE_SIZE, NULL) != 0)
    {
        fout << buffer;
    }

    base += PAGE_SIZE;
    readCount++;
} while (base != 0);
if (readCount == 0) {
    cout << "Warning: No memory was read from the process." << endl;
}
fout.flush();
fout.close();
handleprocess=OpenProcess(process\u VM\u READ,0,pid);
如果(!进程){

cout您正在尝试访问“0”内存位置,这是不可能的(因此不允许您这样做):

您应该正确设置要读取的地址,并且该地址必须是可读地址。请检查ReadProcessMemory文档

lpBaseAddress[in]:指向指定域中的基址的指针 从中读取的进程。在进行任何数据传输之前 系统验证的基址和内存中的所有数据 指定的大小可用于读取访问,如果不是 可访问性:功能失败

还可以查看本文中的示例

由于虚拟内存的原因,转储物理内存是不行的。为什么您认为应该有一种绕过此块的方法?这不是为了阻止您尝试执行的操作吗?尝试的第一件事是在调用OpenProcess之前启用调试权限,这将绕过进程DACL。如果失败,您最好的选择是prob非常感谢您的回复。@Barmar-难道不能从页面文件访问所有虚拟内存吗?有一些工具可以做到这一点。是的,阻止的全部目的是阻止我正在做的事情,但我想做一些分析,但我现在不能。最好的解决方案是了解更多有关Windows的信息。此外,还有一些网站dedic关于游戏以及如何分析它们。还要寻找逆向工程技术。还要寻找主板诊断板;将其中一个放在系统中,然后你可以在任何地方获得内存,没有软件可以打败它。你应该去游戏网站和类似的网站。
char *base = (char *) 0;