首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么(ULONG_PTR)x > (ULONG_PTR)y比较失败?

为什么(ULONG_PTR)x > (ULONG_PTR)y比较失败?
EN

Stack Overflow用户
提问于 2020-03-27 14:31:33
回答 1查看 56关注 0票数 0

0x8A81FAA0x7FFFFFF0000小,为什么它是真的呢?

代码语言:javascript
复制
#if defined(_X86_)
#define ProbeForReadUnicodeStringFullBuffer(String)                                                          \
    if (((ULONG_PTR)((String).Buffer) & (sizeof(BYTE) - 1)) != 0) {                                   \
        ExRaiseDatatypeMisalignment();                                                            \
    } else if ((((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)) < (ULONG_PTR)((String).Buffer)) ||     \
               (((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)) > (ULONG_PTR)MM_USER_PROBE_ADDRESS)) { \
        ExRaiseAccessViolation();                                                                 \
    } else if (((String).Length) > ((String).MaximumLength)) {                                    \
        ExRaiseAccessViolation();                                                                 \
    }
#else
#define ProbeForReadUnicodeStringFullBuffer(String)                                                        \
    if (((ULONG_PTR)((String).Buffer) & (sizeof(WCHAR) - 1)) != 0) {                                  \
        DbgPrint("aaaaaa");\
        ExRaiseDatatypeMisalignment();                                                            \
    } else if ((((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)) < (ULONG_PTR)((String).Buffer)) ||     \
               (((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)) > (ULONG_PTR)MM_USER_PROBE_ADDRESS)) { \
            DbgPrint("bool = %d\n", (((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)) < (ULONG_PTR)((String).Buffer))); \
            DbgPrint("bool2 = %d\n", (((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)) > (ULONG_PTR)MM_USER_PROBE_ADDRESS)); \
            DbgPrint("fsdgfd = %d\n", ((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)));\
            DbgPrint("asdasd = %llu\n", (ULONG_PTR)MM_USER_PROBE_ADDRESS);\
            DbgPrint("bbbbbbb : %d %d %llu\n", ((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)), (ULONG_PTR)((String).Buffer), (ULONG_PTR)MM_USER_PROBE_ADDRESS);\
        ExRaiseAccessViolation();                                                                 \
    } else if (((String).Length) > ((String).MaximumLength)) {                                    \
    DbgPrint("cccccccc");\
        ExRaiseAccessViolation();                                                                 \
    }
#endif
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-27 22:59:02

如果你改变了

代码语言:javascript
复制
DbgPrint("fsdgfd = %d\n", ((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)));\

代码语言:javascript
复制
DbgPrint("fsdgfd = %llu\n", ((ULONG_PTR)((String).Buffer) + ((String).MaximumLength)));\

值显示为

0xFFFFF8A020CB18EA

经过更多的研究,我发现我甚至不需要一个ProbeForRead,因为指针是一个KernelMode指针,并且不需要验证内核模式指针,它们是可信的。

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

https://stackoverflow.com/questions/60888080

复制
相关文章

相似问题

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