我的代码是 -
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跳过==========
我做错了什么?
答案 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是四个字节)。