没有变量的C ++ WriteProcessMemory

时间:2012-04-03 19:52:48

标签: c++ windows

我想在C ++中使用Dword或Int进行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;
}

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

您的代码与字节“一起工作”的原因是您正在使用字符串文字。字符串文字是一个char数组,如果上下文调用它,char数组会自动转换为指向第一个元素的指针,就像你尝试将一个作为WriteProcessMemory的第三个参数传递一样。

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

C ++不提供任何具有非char类型的文字数组的工具。对它的要求不高。对文字字符数组的需求很高,因为每个人都处理文本,因此我们希望在代码中简单地表达它。虽然每个人都使用数字,但我们很少需要在代码中表达数值数据,特别是不能表达中间数据。

你的问题没有解决实际问题。你只是在问是否可以做某事。我很遗憾成为坏消息的承载者,但答案是你要求的东西不能用C ++完成。你只需像其他人一样做,并声明一个变量。变量很便宜;在需要时随时使用它们。尽管如此,您已经看到了ways to keep your code concise by using subroutines。如果这是您的目标,宏还可以帮助缩短您的代码。

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