学习记录----2020.7.29

学习记录

前几天xctf的海外赛是毛子那边办的,跟着一个师傅做题,倒也蛮不错的。
老外的思路果然很骚2333
题目的wp上传到ctf分区了

然后这几天主要就看书那些的,看了些vt以及异常处理的东西。
异常处理以前看过,相当于整理了一下笔记吧
这里记录一下SEH与VEH

VEH与SEH的异同

当异常发生时,VEH会优先于SEH获得程序控制权(如果有调试器的话,调试器会优先于SEH),系统会自动调用通过注册AddVectoredExceptionHandler注册的VEH回调函数,如果修复了异常则返回EXCEPTION_CONTINUE_EXECUTION,随后在异常的发生处以CONTEXT指定的线程环境继续运行,这种情况下SEH就会被跳过。如果回调函数不能处理,则会返回一个EXCEPTION_CONTINUE_SEARCH,之后系统会采取与SEH相同的策略遍历VEH链表。若VEH链表也未能处理,便将控制权回交给系统,随后系统进入SEH处理例程。

而VEH与SEH的不同点主要在于

  • 注册机制不同。SEH的相关信息主要保存于栈中,后注册的回调函数位于SEH链表的首端,所有当异常发生时总是先由内层回调函数优先处理;而VEH的相关信息存储于独立的链表中(实际存储在ntdll中),且VEH在注册中可以指定回调函数是位于链表首或者尾,即可以控制函数的优先处理权。
  • 优先级不同。如上所述,VEH会优先于SEH被调用。
  • 作用范围不同。除了顶层异常处理(这是个全局回调函数)外,SEH的作用范围仅局限于安装它的某个函数内部,即SEH时基于线程的;而VEH可以捕获整个进程的
  • VEH不需要栈展开。SEH的处理是基于栈的,涉及栈展开,有两次被调用的机会;而VEH不是,故只有一次机会

后记

今天洗澡的时候想了想,感觉最近或多或少还是没有全身心投入,打算适当改善一下自己的学习状态。然后就是最近每天晚上还有事情,相当于说也就白天可以拿来学习,所以还是抓紧吧,争取九月份试着去找个实习啥的

你可能感兴趣的:(日常总结)