• winpwn笔记


    1.seh相关数据结构

    传送门

    #define EXCEPTION_CHAIN_END ((struct _EXCEPTION_REGISTRATION_RECORD * POINTER_32)-1)
    
        typedef enum _EXCEPTION_DISPOSITION {
            ExceptionContinueExecution,  
            ExceptionContinueSearch,
            ExceptionNestedException,
            ExceptionCollidedUnwind
        } EXCEPTION_DISPOSITION;
    
        typedef struct _EXCEPTION_RECORD {
            DWORD ExceptionCode;
            DWORD ExceptionFlags;
            struct _EXCEPTION_RECORD *ExceptionRecord; 
            PVOID ExceptionAddress;
            DWORD NumberParameters;
            ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
        } EXCEPTION_RECORD;
    
        typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
    
        typedef
        EXCEPTION_DISPOSITION
        (*PEXCEPTION_ROUTINE) (
            IN struct _EXCEPTION_RECORD *ExceptionRecord,
            IN PVOID EstablisherFrame,
            IN OUT struct _CONTEXT *ContextRecord,
            IN OUT PVOID DispatcherContext
            );
    
        typedef struct _EXCEPTION_REGISTRATION_RECORD {
            //指向下一个 EXCEPTION_REGISTRATION_RECORD,由此构成一个异常注册信息链表。
            //链表中的最后一个结点会将 Next 置为 EXCEPTION_CHAIN_END,表示链表到此结束。
            struct _EXCEPTION_REGISTRATION_RECORD *Next;
            PEXCEPTION_ROUTINE Handler;  //指向异常处理函数
        } EXCEPTION_REGISTRATION_RECORD;
    
        typedef EXCEPTION_REGISTRATION_RECORD *PEXCEPTION_REGISTRATION_RECORD;
    typedef struct _EXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION;
        struct _EXCEPTION_REGISTRATION{
            PEXCEPTION_POINTERS xpointers;
            struct _EXCEPTION_REGISTRATION *prev;
            void (*handler)(PEXCEPTION_RECORD, PEXCEPTION_REGISTRATION, PCONTEXT, PEXCEPTION_RECORD);
            struct scopetable_entry *scopetable;    //类型为 scopetable_entry 的数组
            int trylevel;          //数组下标,用来索引 scopetable 中的数组成员。
            int _ebp;    //包含该 _EXCEPTION_REGISTRATION 结构体的函数的栈帧指针。
                         //对于没有 FPO 优化过的函数,一开头通常有个 push ebp 的操作,_ebp 的值就是被压入的 ebp 的值
        };

     2.windows用户态堆

    windows各个版本堆保护措施的变化

    HeapCreate返回的handle是_heap结构体

     3.windbg的坑

    !heap 
    Invalid type information

    解决

    .symfix
    .reload /f
  • 相关阅读:
    springboot以jar运行时参数传递
    linux 下ab压力测试
    Quartus 11生成pof文件在AS烧写之后,程序无法启动
    芯片底层热焊盘的焊接
    CC3200模块的内存地址划分和bootloader,启动流程(二)
    python开发记录第一篇
    windows下使用Python出现No module named tkinter.ttk
    Pycharm设置Python的路径
    Qsys配置生成nios系统模块
    sprintf()函数使用异常
  • 原文地址:https://www.cnblogs.com/snip3r/p/11820158.html
Copyright © 2020-2023  润新知