我已经被MS Connect主持人要求为我在Visual Studio中遇到的问题提供一个小型转储文件。
我的业务关注转储文件中可能包含的内容(大小约为半个gig)。
“温和地关注”,我只是说他们已经让我知道是否会包含任何专有代码(如果是,那么多少)。
转储文件由Visual Studio通过执行以下操作创建:
我认为StackOverflow的可爱人们可以提供帮助。所以我的问题是:
答案 0 :(得分:4)
用户模式小型转储包含您要转储的进程的内存,而不是整个系统。系统上运行的其他进程不受影响。换句话说,转储包含特定进程的数据和可执行代码。
对于本机代码,表示已编译的代码。对于托管应用程序,这意味着IL和已编译的代码。即从转储文件中提取高级别的托管IL代码是明智的。 IL可以通过Reflector等工具进行解释。
在您的情况下,您正在创建Visual Studio进程的转储文件(devenv.exe),因此除非您有一个存储您的个人数据的VS插件,否则转储将不包含您的个人信息。至于你的源代码,dump 可能包含与此相关的一些数据,但你肯定不会将所有源代码作为转储文件的一部分提供。
答案 1 :(得分: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,这是可能的。您应该阅读他们的使用条款或隐私政策。
所以...转储文件中将显示函数和模块名称,而实际代码则不会。进程内存可以可见(取决于类型参数),因此最好不要在生成转储时将任何敏感数据存储在内存中。