C++语句如果不能工作(惯于读内存)

C++语句如果不能工作(惯于读内存),c++,C++,我为我的节目制作了一个小白名单。 但问题是它不起作用。 代码如下: #include <iostream> #include <Windows.h> #include <string> #include <cstdint> using namespace std; int main(); { //Here is the part where it gets the process and it data so i won't type

我为我的节目制作了一个小白名单。 但问题是它不起作用。 代码如下:

#include <iostream>
#include <Windows.h>
#include <string>
#include <cstdint>

using namespace std;

int main();
{
    //Here is the part where it gets the process and it data so i won't type it here, takes too much space.
    string a;
    uintptr_t p = 0x0178B3A8;
    int value = *reinterpret_cast<int *>(p);
    int ID = 22862235;

    printf("Authorizing...\n");

    if(value == ID)
    {
        printf("Authorized, Access Granted\n");
        Sleep(5000);
    }
    else
    {
        printf("ERROR004:Account Not On Whitelist\n");
        printf("Shutdowning...\n");

        BYTE newcode[] = {0x90, 0x90, 0x90, 0x90, 0x90, 0x90};
        DWORD address = 0x007C122E;

        WriteProcessMemory(GetCurrentProcess(), (LPVOID)address, newcode, sizeof(newcode), NULL);
    }
}
当它运行时,会显示错误404:帐户不在白名单上
有什么解决办法吗?

OP似乎有点不理解

每个进程都有自己的虚拟地址和唯一的地址空间,可以使用也可以不使用任何地址。这允许物理存储在任何物理寻址介质中:高速缓存、RAM、磁盘高速缓存或一些深奥的东西,如成对的亚原子粒子的自旋。因此,所有进程可能同时使用相同的地址,因为每个进程中的每个地址都映射到物理存储中的不同位置

OP已经声明,在某个未知进程中的0x0178B3A8处,X是一个有效的ID号

OP的程序不是进程X。让我们称其为执行进程Y。在进程X中,0x0178B3A8很可能是用户ID的地址。我无法确认这一点。但由于0x0178B3A8是一个虚拟引用,而不是一个物理存储引用,因此进程Y无法读取0x0178B3A8并期望得到进程Y没有放在那里的任何内容。如果Y没有在0x0178B3A8上放置任何内容,则程序的行为未定义


如何解决这个问题我不想管。很可能它不会有好的结局

你试过调试器吗?你正在练习的这个随机指针是什么?这似乎完全是胡说八道。你在这里想要完成什么,有什么解释吗?我所能看到的就是大量的任意指针混搭和直接内存操作,这两种操作都非常令人担忧,并且肯定会产生未定义的行为。为什么您希望在0x178B3A8中找到特定的内容?一个程序的0x0178B3A8与另一个程序的0x0178B3A8不同。仔细阅读虚拟内存。我投票结束这个问题,因为这种黑客行为在SO社区中通常是不受欢迎的,而且极不可能产生任何建设性的内容。