C ++ Memory Editing-写入当前程序

时间:2012-08-05 20:50:57

标签: c++ memory assembly

我的代码是 -

BYTE newValue[] = {0x90, 0x90, 0x90, 0x90};
*(char *)0x004C40DB = &newValue;

我正在努力将004C40DB设置为nop

在Visual C ++ 2010中,我得到了 -

  

1> ------ Build build:Project:file,Configuration:Release Win32

     

1> file.cpp 1> file.cpp(138):错误C2440:'=':无法转换   'BYTE(*)[4]'到'char'

     

1>没有可以进行此转换的上下文

     

1> file.cpp(142):错误C2440:'=':无法转换为'BYTE(*)[4]'   到'char'

     

1>没有可以进行此转换的上下文

     

==========构建:0成功,1失败,0最新,0跳过==========

我做错了什么?

2 个答案:

答案 0 :(得分:1)

首先,请使用C ++风格的演员表。

其次,如果你想写一个0x90,为什么你有一个包含四个数组的数组?一个就够了:

*reinterpret_cast<char *>(0x004C40DB) = 0x90;

但很可能你需要在另一个问题中使用WriteProcessMemory,你需要先使用VirtualProtect使内存可写。

最后,如果你真的需要写多个字节,你需要注意匹配的数据类型 - 你不能将指针到字节写入单个字节。使用WriteProcessMemory,您将传递正确的尺寸。

如果您在自己的流程中写入内存,则可以使用std::copy代替。

答案 1 :(得分:0)

这是你想要做的吗?

BYTE newValue[] = {0x90, 0x90, 0x90, 0x90};
*(long*)0x004C40DB = *(long*)newValue;

如果你试图复制四个字节,那么你需要指向long而不指向char的指针(假设long是四个字节)。