首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否应该使用(无证件)?用于创建64位进程转储的MINIDUMP_EXCEPTION_INFORMATION64结构?

我是否应该使用(无证件)?用于创建64位进程转储的MINIDUMP_EXCEPTION_INFORMATION64结构?
EN

Stack Overflow用户
提问于 2015-03-18 10:32:46
回答 1查看 635关注 0票数 1

目前,我正在研究使用MiniDumpWriteDump创建转储文件(进程中,ahem)的问题。这个问题只出现在64位的构建中。我的代码只是

代码语言:javascript
复制
static LONG WINAPI unhandledExceptionFilter( PEXCEPTION_POINTERS p )
{

    // ...
    MINIDUMP_EXCEPTION_INFORMATION mei;
    mei.ThreadId = ::GetCurrentThreadId();
    mei.ExceptionPointers = p;
    mei.ClientPointers = TRUE;
    if ( !MiniDumpWriteDump( ::GetCurrentProcess(),
                ::GetCurrentProcessId(),
                dumpFile,
                MiniDumpNormal,
                &mei,
                NULL,
                NULL ) ) {
        // ....
    }

偶然地,我注意到Windows中有一个(看似没有文档的?) MINIDUMP_EXCEPTION_INFORMATION64结构,它与MINIDUMP_EXCEPTION_INFORMATION结构有很大的不同:

代码语言:javascript
复制
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
    DWORD ThreadId;
    PEXCEPTION_POINTERS ExceptionPointers;
    BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;

typedef struct _MINIDUMP_EXCEPTION_INFORMATION64 {
    DWORD ThreadId;
    ULONG64 ExceptionRecord;
    ULONG64 ContextRecord;
    BOOL ClientPointers;
} MINIDUMP_EXCEPTION_INFORMATION64, *PMINIDUMP_EXCEPTION_INFORMATION64;

在谷歌上搜索这个新发现的结构时,我发现一个地方在64位构建中使用它。这是否真的很重要,还是仅仅是一次错误的尝试,试图编写64位安全代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-18 13:16:30

MINIDUMP_EXCEPTION_INFORMATION64在调用MiniDumpWriteDump()时不起作用,该函数总是需要传递一个MINIDUMP_EXCEPTION_INFORMATION*。

它表示相同的信息,但表示它在转储文件本身中的记录方式。它需要从您传递的信息转换,不能将指针存储在文件中。需要将其扁平化,ULONG64 ExceptionRecord成员在存储MINIDUMP_EXCEPTION记录的文件中指定偏移量。ULONG64 ContextRecord成员指定存储上下文记录的文件中的偏移量。

转储文件格式没有正式记录,只是非正式地从这类声明中获得。他们是准确的,这是我最后一次玩这个(~2年前)。

所以,跟你的问题无关。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29119664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档