Я должен отображать содержимое n байтов, начиная с определенного адреса памяти, то есть: выход для 25 байт, так как 0x00004000 (сегментный текст в виртуальном пространстве) будет #include <stdio.h> #inclu
(25 букв)Отображение содержимого байта, заданного по адресу
Моей идеей было назначить char *c
указанному адресу, например: *c=address;
, а затем printf("%s",c);
. Для меня концептуально имеет смысл, и я знаю, что в некоторых случаях это приведет к ошибке сегментации, если адрес недействителен.
Однако я реализовал его, и он всегда вызывает ошибку сегментации. Я использую pmap <pid>
, чтобы узнать, какие области могут отображаться (низкие области) этого процесса. Когда я говорю «области, которые могут отображаться», я имею в виду текстовые области (код).
Итак, что я делаю неправильно? глупо присвоить *c=address;
?
Вы хотите 'c = (char *) адрес', а не' * c = '. Вы хотите назначить указатель, а не объект, на который указывает. –
Назначение действительно, но, вероятно, этот адрес не содержит строку (она должна заканчиваться символом '\ 0'). Кстати, попробовали ли вы запустить его с помощью GDB/valgrind, чтобы показать, какой из них дает вам ошибку сегментации? Вы уверены, что можете получить доступ к памяти по этому адресу? – Marco
@Marco Не имеет значения, что находится по адресу. Он никогда не разыменовывается, и завершение 0 имеет значение только для строковых функций, обычно те, чьи имена начинаются с 'str'. –