Получение содержимого адреса в C ++ - PullRequest
0 голосов
/ 27 октября 2011

Возможно ли в C ++ получить содержимое адреса в памяти, если у меня нет указателя на него, но сам адрес есть как uint_32?

Спасибо

EDIT

Я пишу в эти места и пытался проверить, правильно ли работает моя функция write (), поэтому я хотел вручную выполнить чтение по адресам. Упомянутое выше «содержимое» относится к типу uint64_t, и это то, что я пытался сделать, но это дает мне Segmentation Fault.

uint64_t *contents = reinterpret_cast<uint64_t*>(start_address);
cout<< hex << "Contents: " << *contents << endl;

Что я здесь не так делаю?

Ответы [ 5 ]

2 голосов
/ 27 октября 2011

Не уверен в переносимости, но вы можете использовать reinterpret_cast<>. например,

uint_32 adrs;
int *p = reinterpret_cast<int*>(adrs);  // int* should be 32-bit for portable code
1 голос
/ 27 октября 2011

Да, вы можете, если вы приведете это целое число к указателю:

SomeData value = *reinterpret_cast<SomeData*>(some_int);

Но вы должны быть на 100% уверены, что ваше целое число действительно является адресом или плохвещи могут случиться.Так что это считается плохой практикой и обычно хаком.

1 голос
/ 27 октября 2011

Да, но только если адрес находится в вашем адресном пространстве (или если вы работаете на микроконтроллере или в пространстве ядра). В противном случае это вызовет ошибку сегмента.

Просто приведите uint_32 к указателю int и разыменуйте его:

int contents = *((int*)uintAddress);
0 голосов
/ 27 октября 2011

вариант в стиле C:

uint_32 x = 0xc0de;
int *addr = (int*)x;
printf("Address %d contains %d", x, *addr);
0 голосов
/ 27 октября 2011

Вы просто приводите его к указателю и разыменованию.

...