байтовый массив на определенных адресах c ++ - PullRequest
1 голос
/ 04 марта 2011

Я хочу отобразить некоторую часть памяти процесса как байтовый массив. Как это сделать?

У меня есть байтовый массив:

byte AmmoBytes[3]

И я хочу, чтобы этот массив начинался с адреса 0xXXXXXXX; Как это сделать?

Ответы [ 5 ]

5 голосов
/ 04 марта 2011
byte (& a)[3] = *reinterpret_cast<byte (*)[3]>(0xDEADBEEF);
3 голосов
/ 04 марта 2011
byte * AmmoBytes = (byte *) 0xXXXXXXXX;
2 голосов
/ 04 марта 2011

Это небезопасно, но вы можете сказать

byte * AmmoBytes = (byte *) 0xXXXXXXXX

0 голосов
/ 04 марта 2011

Я бы объявил память, используя константу указатель:

byte * const AmmoBytes = (byte * const) 0xFFFF000;

Объявление указателя как константы помогает компилятору обнаруживать ошибки, такие как ошибочное изменение значения указателя вместо указанного значенияпо указателю.

0 голосов
/ 04 марта 2011

Вообще говоря, вы не можете сделать это надежно.

Если 0xXXXXXXX представляет аппаратный адрес (а), то вам нужно написать драйвер устройства, чтобы получить доступ ядра к памяти.

Если это нормальный адрес памяти, то нет никакой гарантии, что он сопоставлен с действительным адресом памяти, и вы вполне можете потерпеть крах вашей программы.

Что вы действительно пытаетесь здесь сделать?

...