Подтвердить что ты не робот

Сохранять данные из окна памяти визуальной студии

Возможна ли возможность сохранения некоторого буфера в любом двоичном файле, для просмотра в автономном шестнадцатеричном редакторе.

Например, могу ли я сохранить данные из окна памяти в VS до шестнадцатеричного дампа, но не как ASCII?

4b9b3361

Ответ 1

user142207 проделал большую работу по исследованию внутренних компонентов VS, я рекомендую это решение. У меня есть другой способ, который был изобретен моим коллегой Сергеем Сергеевичем, что очень полезно:

Окна: Используйте несколько функций ReadProcessMemory/WriteProcessMemory. Для этого требуется автономное приложение, которое вызывает эти функции с идентификатором целевого процесса, например:

dumper.exe <debugged process id> <memory_start_addr> <memory_length>

Это приложение можно вызвать непосредственно во время сеанса отладки VS (по сравнению с Linux, который не имеет такой возможности). Мы можем захватить адрес памяти в окне часов, затем передать адрес на самосвал и вуаля. Как говорит пользователь142207 в своей статье, он очень полезен в проектах с перекомпилированным временем.

Linux/MacOS имеет разные подходы. Например: с консоли gdb используйте память дампа команды. Эта команда также может использоваться непосредственно во время сеанса отладки.

Ответ 2

Я не знаю, помогает ли это, но вы можете использовать команду WinDbg .writemem. Он принимает имя файла и диапазон памяти и выгружает его (как двоичный) на диск.

Ответ 3

Для этого есть расширение: https://marketplace.visualstudio.com/items?itemName=OvidiuIonescu.VSDebugTool. Он открывает свою консоль в окне VisualStudio и позволяет записывать память в файл и пару других операций с памятью (подробности см. В "Справка" ).

Кроме того, некоторые шестнадцатеричные редакторы (например, Hex Editor Neo) могут просматривать память процесса как обычный файл. Возможно, вы также найдете бесплатный редактор с этой функцией.

Ответ 4

Окно просмотра в отладчике Visual Studio может запускать функции, если вы отлаживаете свой собственный код, вы можете просто добавить некоторую функцию в свой код для сохранения буфера в файл и вызвать его из окна просмотра. например:

void WriteToFile(char* name, void* buffer, size_t size)
{
    FILE* fp;
    fopen_s(&fp, name, "wb");
    fwrite(buffer, 1, size, fp);
    fclose(fp);
}

Затем просто введите что-то вроде этого в окне просмотра:

WriteToFile("c:\\temp\\dump.dat", buffer, len)

Ответ 5

Я подозреваю, что вы можете получить то, что хотите, от ClrMD, тогда вы можете точно такие же данные, сколько хотите.

Если вы буквально хотите дамп ядра, то WinDbg может быть тем, что вы ищете?

Существует также этот пост в блогах MSDN: https://blogs.msdn.microsoft.com/dondu/2010/10/24/writing-minidumps-in-c/

В нем описывается, как создавать программные средства dump-ish в .NET.

Ответ 6

У StNickolay есть ответ, который ссылается на какой-то инструмент под названием "dumper", но каким-то образом я не смог найти его по сети (также, user142207 давно ушел). Поэтому я создал тот же самый инструмент - он открывает запущенный процесс (даже при подключенном отладчике) и копирует часть его памяти в файл. Очень полезно, когда вы хотите сохранить некоторую структуру на более позднем этапе и не хотите бороться с выходом "Copy" VS Memory View. Наслаждайтесь!

https://github.com/Alexx999/Dumper