-3

我想使用 Dword 或 Int 在 C++ 中执行 WriteProcessMemory,而不将其存储在变量中我找到了一种方法来做到这一点,但我只能用字节来做到这一点。有谁知道如何做到这一点??这个使用字节工作。

WriteProcessMemory(hProcess, (void*)(BasePointer + 0x728),"\x90\x90", 4, NULL);

感谢大家的帮助,我做了一个函数,它的工作非常好

void WriteMemory(DWORD Address,DWORD NewValue, int NewValueSize)
{
    WriteProcessMemory(hProcess, (void*)Address, (void*)&NewValue, NewValueSize, NULL);
}

int main()
{
    srand(time(0));
    GetProcess();
    WriteMemory((BasePointer + 0x6F8),2+rand()%65500,2);
    CloseHandle(hProcess);
    return 0;
}
4

2 回答 2

2

将数据放入一个数组,并有一个小循环从数组中获取每个项目,将其写入目标进程,然后移动到下一个:

struct data {
    DWORD offset;
    DWORD length;
    char data[256];
};

data items[] = {
    {0x728, 4, "\x90\x90"},
    // ...
};

for (int i=0; i<elements(items); i++)
    WriteProcessMemory(hProcess, (void *)(BasePointer + items[i].offset), items[i].data, items[i].length, NULL);
于 2012-04-03T20:03:43.507 回答
2

您的代码使用字节“工作”的原因是您使用的是字符串文字。字符串文字是 char 数组,如果上下文需要,char 数组会自动转换为指向第一个元素的指针,就像您尝试将一个作为WriteProcessMemory.

您可以将任何您想要的值写为字符串文字,包括一个四字节的 DWord,只要您愿意一次一个字节地表达它。例如,"\x70\x71\x72\x73"。在 Windows 上,这相当于指向 DWord 值 0x73727170 的指针。不过,您可能不想这样做;表达这样的数字很乏味。

C++ 不提供任何用于拥有非 char 类型的文字数组的工具。只是对它的需求不多。对文字 char 数组的需求很高,因为每个人都处理文本,所以我们想要在代码中用简单的方法来表达它。尽管每个人都使用数字,但我们很少需要在代码中表达数字数据块,尤其是中间表达式。

你还没有给出你的问题要解决的实际问题。您只是在问是否有可能做某事。我很抱歉成为坏消息的承担者,但答案是您所要求的不能在 C++ 中完成。你只需要像其他人一样声明一个变量。变量很便宜;在需要时随时使用它们。尽管如此,我们还是向您展示了通过使用子例程来保持代码简洁的方法。如果这是您的目标,宏还可以帮助缩短您的代码。

另请注意,代码中的字符串文字是一个由三个字符组成的数组——引号之间的两个字符,加上编译器自动包含在所有字符串文字末尾的 nul 字符。你告诉函数你已经提供了一个指向一个字节块的指针,这是错误的。函数写入另一个进程的第四个字节将具有未指定的值。

于 2012-04-03T22:39:06.090 回答