Я пытаюсь отладить программу, которую я записал. Согласно отладчику деталь void *
содержит значение 0x804b008. Я хотел бы смочь разыменовать это значение (бросьте его к int *
и доберитесь, это - значение).
Я получаю Ошибку Сегментации с этим кодом. (Программа с void *
все еще работает в фоновом режиме btw - это 'приостанавливается'),
#include <stdio.h>
int main() {
int* pVal = (int *)0x804b008;
printf("%d", *pVal);
}
Я вижу, почему способность к отсрочке, любая точка в памяти могла быть опасной поэтому, возможно, вот почему, это не работает.
Спасибо!
Ваша программа (запущенная в отладчике ), и этот не будет работать в том же пространстве виртуальной памяти; доступ к этому указателю (даже если он действительный) не даст вам никакой информации.
Каждая программа, запущенная на вашем компьютере, имеет собственное логическое адресное пространство. Ваша операционная система, среда выполнения языка программирования и другие факторы могут влиять на фактические буквальные значения, которые вы видите в качестве указателей для любой данной программы. Но одна программа определенно не может заглядывать в пространство памяти другой программы, за исключением, конечно, программных отладчиков, которые делают некоторые специальные приемы для поддержки такого поведения.
В любом случае ваш отладчик должен позволять вам видеть любую память, которую вы хотите, пока ваша программа приостановлена - при условии, что у вас есть действующий адрес. В gdb x / x 0x804b008
даст вам то, что вы хотите увидеть.
Для получения дополнительной информации:
gdb
документация Это довольно просто. ОС знает, что адрес не принадлежит вашей программе, поэтому вы не можете распечатать его, не обойдя защиту памяти.