to alwaysakid:
请问能不能说得更清楚点啊。拜托!

解决方案 »

  1.   

    作为参考:
    PVOID pfnSourceOrg = (PVOID) GetProcAddress (hModule, 
    SourceFuction/*"TextOutA"*/);
       ...(使用OpenProcess,VirtualAllocEx等方法分配内存,具体用法见MSDN)
    WriteProcessMemory(hProcess, 
    pfnSourceOrg,
                      ...);
      

  2.   

    lpBaseAddress是你想写入进程中的绝对地址,你想向某进程的0x400000写入东西,那么lpBaseAddress=0x400000就行了
      

  3.   

    “看这个函数中的第二个参数,好像应该是相对地址吧”——此言差矣。是绝对地址,就是“绝对”的、hProcess所指进程地址空间内的逻辑地址。
      

  4.   

    是这样的,我用游戏修改器搜索到了游戏中的某个数值,比如生命值,它的地址是0x507804,于是把lpBaseAddress设为0x507804,写入新的数值,可是我发现内存里的这个位置上的数据并没有改变(通过内存修改器观察)。这是怎么回事呢,哪里有问题?
      

  5.   

    VirtualProtectEx有没有调用过?
      

  6.   

    你要确信你打开的hProcess具有PROCESS_VM_WRITE和PROCESS_VM_OPERATION存取权限,而且对方进程的0x507804地址对应的段(页)是可写的(否则必须VirtualProtectEx)。不满足这些条件,WriteProcessMemory就会失败。
      

  7.   

    一般放生命值的地方都是RW属性的,建议检查返回值,我估计你是不是HPROCESS没传对
      

  8.   

    OpenProcess的时候指定:PROCESS_VM_WRITE了吗?
    VirtualProtect成功了吗?看看返回值。
    另外内存修改器刷新了吗?最好关了重开再看。
    再不行,自己ReadProcessMemory一把。