Как из дампа сделать dll
Перейти к содержимому

Как из дампа сделать dll

  • автор:

Файлы дампа в отладчике Visual Studio

Файл дампа — это моментальный снимок, показывающий выполнявшийся процесс и загруженные для приложения модули в определенный момент времени. Дамп со сведениями о куче также содержит моментальный снимок памяти приложения на этот момент.

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

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

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

Требования и ограничения

  • Для отладки файлов дампа, полученных с 64-разрядных компьютеров, необходимо запустить Visual Studio на 64-разрядном компьютере.
  • Visual Studio поддерживает отладку файлов дампа управляемых приложений в Linux.
  • Visual Studio поддерживает отладку файлов дампа, создаваемых приложениями в машинных кодах на устройствах ARM. Он также поддерживает отладку дампов управляемых приложений с устройств ARM, но только в отладчике машинного кода.
  • Для отладки файлов дампа, полученных в режиме ядра, или использования расширения отладки SOS.dll в Visual Studio загрузите средства отладки для Windows из комплекта разработки драйверов для Windows (WDK).
  • Visual Studio не поддерживает отладку файлов дампа, сохраненных в старом формате полного дампа в режиме пользователя. Полный дамп в режиме пользователя не то же самое, что и дамп с кучей.
  • Отладка с использованием файлов дампа оптимизированного кода может сопровождаться ложной информацией. К примеру, встраивание компилятором функций может приводить к непредвиденным стекам вызовов, а другие виды оптимизации могут изменять время существования переменных.

Дамп-файлы с кучами или без нее

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

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

Создание файла дампа

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

Если включена JIT-отладка, можно подключить отладчик Visual Studio к аварийному процессу, который выполняется вне Visual Studio, а затем сохранить файл дампа из отладчика. См. раздел Подключение к выполняющимся процессам.

Сохранение файла дампа

  1. Когда во время отладки происходит остановка (при возникновении ошибки или в точке останова), выберите Отладка>Сохранить дамп как.
  2. В диалоговом окне Сохранение дампа для пункта Тип файла можно выбрать Малый дамп или Малый дамп с кучей (по умолчанию).
  3. Укажите путь сохранения и выберите имя файла дампа, а затем нажмите Сохранить.

Вы можете создавать файлы дампа с помощью любой программы, которая поддерживает формат минидампов Windows. Такой программой, например, может быть программа командной строки Procdump из Windows Sysinternals, которая может создавать файлы аварийного дампа процесса на основе триггеров или по требованию. Дополнительные сведения об использовании других средств для создания файлов дампа см. в разделе Требования и ограничения.

Открытие файла дампа

Screenshot showing Minidump summary page.

  1. В Visual Studio последовательно выберите Файл>Открыть>Файл.
  2. В диалоговом окне Открытие файла найдите и выберите файл дампа. Обычно они имеют расширение DMP. Нажмите ОК. В окне Сводка файла минидампа отображается сводка и сведения о модулях для файла дампа, а также действия, которые можно выполнить.
  3. В разделе Действия:
    • чтобы задать расположения для загрузки символов, выберите Set symbol paths (Задать пути к символам);
    • чтобы начать отладку, выберите Debug with Managed Only (Отладка только с управляемым кодом), Debug with Native Only (Отладка только с машинным кодом), Debug with Mixed (Отладка со смешанным кодом) или Debug with Managed Memory (Отладка с управляемой памятью).

Поиск файлов .exe, PDB и исходных файлов

Для использования всех возможностей отладки в файле дампа Visual Studio требуются следующие файлы.

  • Файл .exe, для которого был создан дамп, и другие двоичные файлы (DLL и т. п.), использовавшиеся процессом дампа.
  • Файлы символов (.pdb) для EXE-файлов и других двоичных файлов.
  • EXE— и PDB-файлы, в точности соответствующие версии и сборке файлов, использовавшихся при создании дампа.
  • Исходные файлы для соответствующих модулей. Если не удается найти исходные файлы, можно использовать дизассемблирование модулей.

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

Пути поиска для EXE-файлов

Visual Studio автоматически ищет EXE-файлы, не включенные в файл дампа, в следующих расположениях.

  1. В папке, содержащей файл дампа.
  2. В пути к модулю, указанному файлом дампа (это путь к модулю на компьютере, на котором был собран дамп).
  3. В путях к символам, указанных в разделе Инструменты (или Отладка) >Параметры>Отладка>Символы. Можно также открыть страницу Символы из панели Действия окна Сводка файла дампа. На этой странице можно добавить другие расположения для поиска.

Использование страниц No Binary, No Symbols или No Source Found

Если Visual Studio не может найти файлы, необходимые для отладки модуля в дампе, отображается соответствующая страница No Binary Found (Двоичные файлы не найдены), No Symbols Found (Символы не найдены) или No Source Found (Исходные файлы не найдены). На этих страницах содержатся подробные сведения о причине проблемы, а также ссылки на действия, которые могут помочь найти файлы. См. статью Указание файлов символов (.pdb) и файлов с исходным кодом в отладчике Visual Studio.

Связанный контент

  • Отладка дампа управляемой памяти с помощью диагностических анализаторов .NET
  • JIT-отладка
  • Указание файлов символов (PDB) и файлов с исходным кодом
  • IntelliTrace

Как при наличии отладочных символов только своей dll получить её переменные из дампа памяти приложения?

Есть моя DLL библиотека (проект Visual Studio 2013). Ее используют чужие программы. Во время работы этих программ было сохранено несколько полных дампов память процессов этих программ.
Я открываю эти дампы в моем Visual Studio проекте. Отладочные символы я имею только для моей DLL. При этом, если во время сохранения дампа исполнялся код одной из функций моей DLL, то видно все символы в исходном коде, место текущего исполнения итд. Но если, исполнялся другой код, я никаких данных не вижу и посмотреть текущее значение переменных моей DLL не могу. Локальные переменные ясное дело недоступны, так как их нет, но и статические данные тоже не видны. Как просматривать данные моей DLL?

Отслеживать
124k 24 24 золотых знака 131 131 серебряный знак 312 312 бронзовых знаков
задан 13 июл 2015 в 11:46
419 4 4 серебряных знака 14 14 бронзовых знаков
Ого! Это целое искусство.
13 июл 2015 в 17:10
А у вас есть символы (то есть, pdb) на чужие DLL?
13 июл 2015 в 17:11
@VladD, судя по оригинальному заголовку, чужих pdb нет.
13 июл 2015 в 17:57
@Qwertiy: Ну тогда в силе первый комментарий 🙂
13 июл 2015 в 18:00

Pdb только моей DLL. VladD, а где можно найти информацию о том, почему это так? Я не понимаю до конца, почему в 1-м случае данные видны, а в другом нет.

14 июл 2015 в 9:05

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Не уверен, можно ли это сделать через студию. Но точно можно через WinDBG:

  1. Открыть дамп.
  2. Включить ссылки в выводе:

.prefer_dml 1 
.sympath+ srv* 
.loadby sos clr 
.loadby sos mscorwks 

или по полному пути

.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.dll 
> !name2ee mscorlib.dll System.Console Module: 0000064278854000 (mscorlib.dll) Token: 0x000000000200008b MethodTable: 00000642788c8d10 EEClass: 0000064278a271a8 Name: System.Console 
> !dumpclass 0000064278a271a8 Class Name: System.Console mdToken: 000000000200008b (C:\WINDOWS\assembly\GAC_64\mscorlib\2.0.0.0__b77a5c561934e089\mscorlib.dll) Parent Class: 00000642788c0c30 Module: 0000064278854000 Method Table: 00000642788c8d10 Vtable Slots: 4 Total Method Slots: 78 Class Attributes: 100181 Abstract, NumInstanceFields: 0 NumStaticFields: d MT Field Offset Type VT Attr Value Name 00000642788f5aa0 40002ae d8 System.IO.TextReader 0 shared static _in 

Дальше перемещаться кликами по адресам объектов — в режиме DML по клику будет выполнятся соответствующая команда для дампа объекта.

Как сделать дамп dll, написанной на C++?

Author24 — интернет-сервис помощи студентам

Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll)
Доброго времени суток!Задали лабораторную работу: программа, написанная на с++ должна подключать.

Как вызвать функцию из dll, написанной на C++?
Здравствуйте, как вызвать данную функцию правильно: extern int __stdcall CheckRequestA(char *.

Как сделать установочный файл написанной программы?
Я написал прогу будильника. Теперь надо сделать установочный файл, чтобы она устанавливалось на.

Как из программы написанной на PyQT5 сделать отдельный модуль?
Вот у меня есть небольшая программа которая отображает картинку(капчу), и поле для ввода капчи. .

Помогите сделать дамп client.dll из памяти

Нович0к

isnsdlk Нович0к
Сообщения: 1 Зарегистрирован: 16.01.2009

1.Если есть лицензия
2.Отключаем от инета и запускаем в режиме отладки с помощью
WinDbg
http://msdl.microsoft.com/download/symb . .1.404.msi
3.Запускаем любую кооп компанию
4.Возвращаемся в WinDbg и давим break
5.Пишем lm в консоли появляется список загруженных модулей
6.Ищем адрес начала и конца для client.dll
7.Делаем дамп .writemem [путь]\client.dll [начальный адрес] L?[Конечный-НачальныйАдрес] из пункта 6.

По идее в памяти файл уже должен быть дешифрован.

Последний раз редактировалось isnsdlk 25.11.2009, 12:09, всего редактировалось 1 раз.

Майор

Dr_Quake Майор
Сообщения: 654 Зарегистрирован: 10.03.2008 Поблагодарили: 6 раз Контактная информация:

Не думаю что так топорно будет толк. Плюс импорт фиксить ещё надо, иначе раком потом только.

И не забываем что такое дело на лицензии не в сингле — сразу бан VAC.

Нович0к

9RevolutioN9 Нович0к
Сообщения: 1 Зарегистрирован: 24.11.2009 Откуда: РоссиЯ Контактная информация:

Я тут заметил было кряк позволяющий поиграть по сети. Хочу с братом поиграть по сети. Left 4 Dead 2 одинаковый (Репак но кряки разные) один кряк помог на одном компе, другой на втором. С конфигурациями компов Всё в норме работает на максималке без тормозов. Подскажите как поиграть по сети (Не через гарену или Хамач . )

———————————
Беги. беги.
От меня не убежишь. =)
———————————

Майор

OutFace Майор
Сообщения: 773 Зарегистрирован: 28.01.2009 Поблагодарили: 1 раз

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *