【发布时间】:2011-03-04 13:59:32
【问题描述】:
我想将进程内存的某些部分映射为字节数组。 怎么做?
我有字节数组:
byte AmmoBytes[3]
我希望这个数组从地址 0xXXXXXXX 开始; 怎么做?
【问题讨论】:
标签: c++ arrays memory bytearray
我想将进程内存的某些部分映射为字节数组。 怎么做?
我有字节数组:
byte AmmoBytes[3]
我希望这个数组从地址 0xXXXXXXX 开始; 怎么做?
【问题讨论】:
标签: c++ arrays memory bytearray
byte (& a)[3] = *reinterpret_cast<byte (*)[3]>(0xDEADBEEF);
【讨论】:
byte (*)[3]的类型是什么?
a 是对绑定到内存地址 0xDEADBEEF 的 3 元素字节数组的引用?
byte * AmmoBytes = (byte *) 0xXXXXXXXX;
【讨论】:
这是不安全的,但你可以说
byte * AmmoBytes = (byte *) 0xXXXXXXXX
【讨论】:
一般来说,你不能可靠地做到这一点。
如果0xXXXXXXX 代表硬件地址,那么您需要编写设备驱动程序来获得内核对内存的访问权限。
如果它是一个普通的内存地址,那么不能保证它映射到一个有效的内存位置,你很可能会崩溃你的程序。
你真的想在这里做什么?
【讨论】:
我会使用 constant 指针声明内存:
byte * const AmmoBytes = (byte * const) 0xFFFF000;
将指针声明为常量有助于编译器检测错误,例如错误地更改指针值而不是指针指向的值。
【讨论】: