6

MS Connect 版主要求我为我在使用 Visual Studio 时遇到的问题提供一个小型转储文件。

我的公司有点担心转储文件中可能包含的内容(大小约为半个演出)。

通过“轻度关注”,我仅仅意味着他们要求我找出是否会包含任何专有代码(如果是的话,会包含多少)。

转储文件是由 Visual Studio 通过执行以下操作创建的:

  1. 启动 Visual Studio。
  2. 启动另一个 VS 实例。
  3. 在第二个实例中,单击工具 | 附加到进程...
  4. 在进程列表中找到 devenv.exe。
  5. 单击选择...并明确选择“本机”和“托管”代码。
  6. 单击“确定”和“确定”关闭“选择”对话框和“附加到进程”对话框。
  7. 回到 VS 的第一个实例并重现崩溃。
  8. 崩溃后,控制权应转到 VS 的第二个实例。
  9. 在第二个实例中单击调试 | 保存迷你转储。

我认为 StackOverflow 上可爱的人们会提供帮助。所以我对你的问题是:

  • Visual Studio 转储文件中有什么?
  • 在创建转储文件之前,我是否应该考虑任何注意事项,以避免发送我的电子邮件内容、我的所有密码和我的银行账户详细信息以及我所有同事的源代码?
4

2 回答 2

4

用户模式迷你转储包含您正在转储的进程的内存,而不是整个系统。系统上运行的其他进程不受影响。换句话说,转储包含特定进程的数据和可执行代码。

对于本机代码,这意味着已编译的代码。对于托管应用程序,这意味着 IL 和编译代码。即,从转储文件中提取高级托管 IL 代码是不费吹灰之力的。IL 可以通过 Reflector 等工具进行解释。

在您的情况下,您正在创建 Visual Studio 进程 (devenv.exe) 的转储文件,因此除非您有存储个人数据的 VS 插件,否则转储将不包含您的个人信息。至于您的源代码,转储可能包含一些与此相关的数据,但您绝对不会将所有源代码作为转储文件的一部分提供。

于 2011-11-14T17:27:09.743 回答
1

转储文件可以包含许多内容。

它通常是通过调用生成的

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,这是可能的。您应该阅读他们的使用条款或隐私政策。

所以...函数和模块名称将从转储文件中可见,实际代码不会。进程内存是可见的(取决于类型参数),因此在生成转储时最好不要在内存中存储任何敏感数据。

于 2011-11-14T16:21:36.940 回答