Что находится в файле дампа? - PullRequest
6 голосов
/ 14 ноября 2011

Модератор MS Connect попросил меня предоставить файл мини-дампа для проблемы, с которой я столкнулся в Visual Studio.

Моя компания слегка обеспокоена тем, что может содержаться в файле дампа.(размер которого составляет около половины гигабайта).

Под "легкой заботой" я просто имею в виду, что они попросили меня выяснить, будет ли включен какой-либо проприетарный код (и, если да, то сколько).

Файл дампа был создан Visual Studio, выполнив следующие действия:

  1. Запустите Visual Studio.
  2. Запустить другой экземпляр VS.
  3. Во втором случае нажмите Инструменты |Присоединить к процессу ...
  4. В списке процессов найдите devenv.exe.
  5. Нажмите «Выбрать ...» и явно выберите «Нативный» и «Управляемый» код.
  6. Нажмите OK и OK, чтобы закрыть диалоговое окно Select и диалог Attach to Process.
  7. Вернитесь к первому экземпляру VS и воспроизведите сбой.
  8. При аварии управление должно перейти ко второму экземпляру VS.
  9. Во втором случае нажмите Отладка |Сохранить мини-дамп.

Я думал, что милые люди здесь, в StackOverflow, смогут помочь.Итак, мои вопросы к вам:

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

Ответы [ 2 ]

4 голосов
/ 14 ноября 2011

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

Для нативного кода это означает скомпилированный код.Для управляемого приложения это означает и IL, и скомпилированный код.Т.е. извлекать управляемый IL-код высокого уровня из файла дампа нетрудно.IL можно интерпретировать с помощью таких инструментов, как Reflector.

В вашем случае вы создаете файл дампа процесса Visual Studio (devenv.exe), поэтому, если у вас нет плагина VS, который хранит ваши личные данные, дамп не будет содержать вашу личную информацию.Что касается вашего исходного кода, дамп может содержать некоторые данные, связанные с этим, но вы определенно не отправляете весь свой исходный код как часть файла дампа.

1 голос
/ 14 ноября 2011

Файл дампа может содержать много вещей.

Обычно генерируется с вызовом

BOOL WINAPI MiniDumpWriteDump(
  __in  HANDLE hProcess,
  __in  DWORD ProcessId,
  __in  HANDLE hFile,
  __in  MINIDUMP_TYPE DumpType,
  __in  PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
  __in  PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
  __in  PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);

Информация, включенная в дамп, задается параметром DumpType:

typedef enum _MINIDUMP_TYPE {
  MiniDumpNormal                           = 0x00000000,
  MiniDumpWithDataSegs                     = 0x00000001,
  MiniDumpWithFullMemory                   = 0x00000002,
  MiniDumpWithHandleData                   = 0x00000004,
  MiniDumpFilterMemory                     = 0x00000008,
  MiniDumpScanMemory                       = 0x00000010,
  MiniDumpWithUnloadedModules              = 0x00000020,
  MiniDumpWithIndirectlyReferencedMemory   = 0x00000040,
  MiniDumpFilterModulePaths                = 0x00000080,
  MiniDumpWithProcessThreadData            = 0x00000100,
  MiniDumpWithPrivateReadWriteMemory       = 0x00000200,
  MiniDumpWithoutOptionalData              = 0x00000400,
  MiniDumpWithFullMemoryInfo               = 0x00000800,
  MiniDumpWithThreadInfo                   = 0x00001000,
  MiniDumpWithCodeSegs                     = 0x00002000,
  MiniDumpWithoutAuxiliaryState            = 0x00004000,
  MiniDumpWithFullAuxiliaryState           = 0x00008000,
  MiniDumpWithPrivateWriteCopyMemory       = 0x00010000,
  MiniDumpIgnoreInaccessibleMemory         = 0x00020000,
  MiniDumpWithTokenInformation             = 0x00040000 
} MINIDUMP_TYPE;

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

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

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

Итак ... имена функций и модулей будут видны из файла дампа, реальный код не будет.Память процесса может быть видимой (в зависимости от параметра типа), поэтому лучше не сохранять конфиденциальные данные в памяти при создании дампа.

...