-3

我的代码是-

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

我试图将其设置004C40DBnop.

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

1>------构建开始:项目:文件,配置:发布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 跳过 ==========

我究竟做错了什么?

4

2 回答 2

1

首先,为了你自己,使用 C++ 风格的强制转换。

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

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

但是很可能您需要WriteProcessMemory按照另一个问题中的说明使用,并且您需要首先使用VirtualProtect.

最后,如果确实需要写入多个字节,则需要注意匹配数据类型——不能将指向字节的指针写入单个字节。使用WriteProcessMemory,您将传递正确的大小。

如果您在自己的进程中写入内存,则可以std::copy改用。

于 2012-08-05T21:16:42.563 回答
0

这是你想要做的吗?

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

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

于 2012-08-05T21:12:01.850 回答