Visual Studio 2010: как печатать память в текстовый файл?

70
6

Я ищу конкретную серию бит в памяти, но я не знаю точного адреса. Есть ли способ в Visual Studio напечатать большой блок памяти в текстовом файле, чтобы я мог выполнить поиск битов, которые я ищу?

спросил(а) 2014-09-08T18:00:00+04:00 6 лет, 1 месяц назад
1
Решение
58

Учитывая, что ваша программа может генерировать ошибки для доступа к неопределенным или незаконным областям памяти, вот как печатать из памяти:

  // Assign a point to point to memory.
uint8_t const * pointer_to_memory = (uint8_t const *) /* Put address here */;

// Read from memory
uint8_t byte = *pointer_to_memory;

// Output the value
std::cout << std::hex << byte << " ";

Общий вывод для сброса памяти:

AAAAAAAA    BB BB BB BB BB BB BB BB   BB BB BB BB BB BB BB BB  .................

Где:
AAAAAAAA - адрес памяти (содержимое вашего указателя), обычно в шестнадцатеричном формате.
BB - байт памяти, обычно в шестнадцатеричном формате.
... - символ ASCII, представленный байтом или '.' для непечатаемых символов.

Как прокомментировали другие люди, вам может потребоваться использовать OS API для чтения ограниченных областей памяти, или ваше приложение должно работать с правами System.

ответил(а) 2014-09-08T18:26:00+04:00 6 лет, 1 месяц назад
70

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


В режиме отладки вы можете открыть окно памяти в Visual Studio, скопировать содержимое, вставить его в текстовый редактор и сохранить в текстовый файл для дальнейшего анализа. В меню "Отладка" выберите "Окно/Память/Память 1" (2, 3 или 4, если необходимо). Введите начальный адрес диапазона вверху, сделайте выбор и скопируйте данные в буфер обмена.

ответил(а) 2014-09-08T18:07:00+04:00 6 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема