钩子函数

恢复在WIN64上的SSDT钩子

痞子三分冷 提交于 2020-01-07 07:39:48
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 要恢复SSDT,首先要获得SSDT各个函数的原始地址,而SSDT各个函数的原始地址,自然是存储在内核文件里的。于是,有了以下思路: 1.获得内核里KiServiceTable的地址(变量名称:KiServiceTable) 2.获得内核文件在内核里的加载地址(变量名称:NtosBase) 3.获得内核文件在PE32+结构体里的映像基址(变量名称:NtosImageBase) 4.在自身进程里加载内核文件并取得映射地址(变量名称:NtosInProcess) 5.计算出KiServiceTable和NtosBase之间的“距离”(变量名称:RVA) 6.获得指定INDEX函数的地址(计算公式:*(PULONGLONG)(NtosInProcess+RVA+8*index)-NtosImageBase+NtosBase) 思路和WIN32下获得SSDT函数原始地址差异不大,接下来解释一下第六步的计算公式是怎么得来的。首先看一张IDA的截图: 可见,从文件中的KiServiceTable地址开始,每8个字节,存储一个函数的“理想地址”(之所以说是理想地址,是因为这个地址是基于『内核文件的映像基址NtosImageBase』的,而不是基于『内核文件的加载基址NtosBase』的)。因此,得到8*index

导航钩子的三个参数解析

与世无争的帅哥 提交于 2020-01-06 21:45:33
--------------------------------------------全局守卫---------------------------------------------- 全局前置守卫(guard) router.beforeEach((to,from,next)=>{ //从from 跳转到 to // to:即将要进入的目标的路由对象 //from:当前导航即将离开的路由对象 //next:调用该方法后,才能进入下一个钩子 //可以利用导航守卫,修改页面标题 document.title = to.matched[0].meta.title }) 全局后置钩子(hook) 不需要主动调用next()函数 router.afterEach((to,from)=>{ }) --------------------路由独享守卫(与全局前置守卫方法的参数一样)---------------- const router = new VueRouter({ routes: [ { path: '/foo', component: Foo, beforeEnter: (to, from, next) => { console.log("aaaaaaaaaaa") next() } } ] }) ----------------------------------------

Vue深度学习(5)-过渡效果

拟墨画扇 提交于 2020-01-03 11:39:35
简介 通过 Vue.js 的过渡系统,你可以轻松的为 DOM 节点被插入/移除的过程添加过渡动画效果。Vue 将会在适当的时机添加/移除 CSS 类名来触发 CSS3 过渡/动画效果,你也可以提供相应的 JavaScript 钩子函数在过渡过程中执行自定义的 DOM 操作。   以 v-transition="my-transition 这个指令为例,当带有这个指令的 DOM 节点被插入或移除时,Vue 将会:   1.用 my-transition 这个 ID 去查找是否有注册过的 JavaScript 钩子对象。这个对象可以是由 Vue.transition(id, hooks) 全局注册,或是通过 transitions 选项定义在当前的组件内部。如果找到此对象,则会在过渡动画不同的阶段调用相应的钩子。   2.自动探测目标元素是否应用了 CSS 过渡效果或者动画效果,并在适当的时机添加/移除 CSS 类名。   3.如果没有提供 JavaScript 钩子函数,也没有检测到相应的 CSS 过渡/动画效果, DOM 的插入/移除会在下一帧立即执行。 <div v-if="show" transition="my-transition"></div> 所有的 Vue.js 过渡效果只有在该 DOM 操作是通过 Vue.js 触发时才会生效。触发的方式可以是通过内置指令,比如 v

全局键盘钩子

这一生的挚爱 提交于 2019-12-31 23:15:57
这是在系统的范围内截获键盘消息,所以需要全局键盘钩子,全局键盘钩子需要DLL文件的支持,这样系统才能把DLL强行的加载到进程中去。 建立一个新的DLL文件 ,在DllMain()函数所在的CPP中添加: 定义两个全局变量:钩子句柄和DLL模块句柄。 HHOOK g_Hook = NULL; HINSTANCE g_Instance = NULL; 在DllMain函数中保存DLL模块句柄,安装钩子SetWindowsHookEx()参数需要用到。 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call,LPVOID lpReserved) { g_Instance = (HINSTANCE)hModule; //保存DLL模块句柄 return TRUE; } 键盘钩子函数,调用约定为_stdcall: LRESULT _stdcall KeyboradProc(int code ,WPARAM wParam,LPARAM lParam) { if (code < 0) { return CallNextHookEx(g_Hook,code,wParam,lParam); } if (code == HC_ACTION&&lParam>0) { char Buffer[10] = { 0 };

Keil uCos 2.52 stm32 【worldsing笔记】

五迷三道 提交于 2019-12-31 19:57:55
1、uCOSii V2.52 a、加了7个可以配置的钩子函数宏 #define OS_TASK_CREATE_HOOK_EN 0 /* 任务创建时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_STAT_HOOK_EN 0 /* 统计任务运行时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_SW_HOOK_EN 1 /* 任务调度时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TIME_TICK_HOOK_EN 1 /* 滴答中断时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TCB_INIT_HOOK_EN 0 /* TCB初始化时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_IDLE_HOOK_EN 0 /* 统计任务运行时调用钩子函数 使能 1 / 禁止 0 */ #define OS_INIT_BEGIN_HOOK_EN 0 /* OS初始化开始时调用钩子函数 使能 1 / 禁止 0 */ #define OS_INIT_END_HOOK_EN 0 /* OS初始化结束时调用钩子函数 使能 1 / 禁止 0 */ b、加了创建任务是自动分配栈接口OSSetupTask和宏,也可以用原生的OSTaskCreate(),OSSetupTask(任务名,

截获 Windows socket API

女生的网名这么多〃 提交于 2019-12-26 15:45:39
1、前言 本文主要介绍了如何实现替换Windows上的API函数,实现 Windows API Hook (当然,对于socket的Hook只是其中的一种特例)。这种Hook API技术被广泛的采用在一些领域中,如 屏幕取词 , 个人防火墙 等。 这种 API Hook技术 并不是很新,但是涉及的领域比较宽广,要想做好有一定的技术难度。本文是采集了不少达人的以前资料并结合自己的实验得出的心得体会,在这里进行总结发表,希望能够给广大的读者提供参考,达到抛砖引玉的结果。 2、问题 最近和同学讨论如何构建一个Windows上的简单的个人防火墙。后来讨论涉及到了如何让 进程 关联 套接字端口 ,替换windows API,屏幕取词等技术。 其中主要的问题有: 1) 采用何种机制来截获 socket 的调用? 一般来说, 实现截获socket的方法有很多很多,最基本的,可以写 驱动 , 驱动 也有很多种, TDI驱动, NDIS驱动,Mini port驱动 …。由于我使用的是Win2000系统,所以截获socket也可以用Windows SPI来进行。另外一种就是 Windows API Hook 技术。 由于我没什么硬件基础,不会写驱动 ,所以第一种方法没有考虑,而用SPI相对比较简单。但是后来觉得Windows API Hook适应面更广,而且觉得自己动手能学到不少东西,就决定用

Vue的生命周期函数

岁酱吖の 提交于 2019-12-24 00:24:52
详解Vue Lifecycle 先来看看vue官网对vue生命周期的介绍 Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。 每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:初始化、运行中、销毁。 实例、组件通过new Vue() 创建出来之后会初始化事件和生命周期,然后就会执行beforeCreate钩子函数,这个时候,数据还没有挂载呢,只是一个空壳,无法访问到数据和真实的dom,一般不做操作 挂载数据,绑定事件等等,然后执行created函数,这个时候已经可以使用到数据,也可以更改数据,在这里更改数据不会触发updated函数,在这里可以在渲染前倒数第二次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取 接下来开始找实例或者组件对应的模板,编译模板为虚拟dom放入到render函数中准备渲染,然后执行beforeMount钩子函数,在这个函数中虚拟dom已经创建完成,马上就要渲染,在这里也可以更改数据,不会触发updated,在这里可以在渲染前最后一次更改数据的机会,不会触发其他的钩子函数,一般可以在这里做初始数据的获取 接下来开始render,渲染出真实dom

vue组件的生命周期

三世轮回 提交于 2019-12-23 13:13:54
Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算。这意味着你不能使用箭头函数来定义一个生命周期方法。这是因为箭头函数绑定了父上下文,因此this与你期待的Vue实例不同。 1、beforeCreate   在实例初始化之后,数据观测和event/watcher时间配置之前被调用。 2、created   实例已经创建完成之后被调用。在这一步,实例已经完成以下的配置:数据观测,属性和方法的运算,watch/event事件回调。然而,挂载阶段还没开始,$el属性目前不可见。 3、beforeMount   在挂载开始之前被调用:相关的render函数首次被调用。   该钩子在服务器端渲染期间不被调用。 4、mounted   el被新创建的vm.$el替换,并挂在到实例上去之后调用该钩子函数。如果root实例挂载了一个文档内元素,当mounted被调用时vm.$el也在文档内。   该钩子在服务端渲染期间不被调用。 5、beforeUpdate   数据更新时调用,发生在虚拟DOM重新渲染和打补丁之前。   你可以在这个钩子中进一步第更改状态,这不会触发附加的重渲染过程。   该钩子在服务端渲染期间不被调用。 6、updated   由于数据更改导致的虚拟DOM重新渲染和打补丁,在这之后会调用该钩子。   当这个钩子被调用时

Vue之生命周期函数和钩子函数详解

六月ゝ 毕业季﹏ 提交于 2019-12-23 13:06:52
在学习vue几天后,感觉现在还停留在初级阶段,虽然知道怎么和后端做数据交互,但是对对vue的生命周期不甚了解。只知道简单的使用,而不知道为什么,这对后面的踩坑是相当不利的。 因为我们有时候会在几个钩子函数里做一些事情,什么时候做,在哪个函数里做,我们不清楚。 今天就记录一下学习所得。 Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、销毁等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。 每一个组件或者实例都会经历一个完整的生命周期,总共分为三个阶段:初始化、运行中、销毁。 beforeCreate() 这是我们遇到的第一个生命周期函数,表示实例完全被创建出来之前,会执行它。 注意: 在 beforeCreate 生命周期函数执行的时候,data 和 methods 中的 数据都还没有没初始化 created() 这是遇到的第二个生命周期函数 ,在 created 中,data 和 methods 都已经被初始化好了!如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作 beforeMount() 这是遇到的第3个生命周期函数,表示 模板已经在内存中编辑完成了,但是尚未把 模板渲染到 页面中,在 beforeMount 执行的时候

Vue2.0关于生命周期和钩子函数

末鹿安然 提交于 2019-12-21 03:44:55
Vue生命周期简介: Vue1.0+和Vue2.0在生命周期钩子上的区别还是很大的,如下: 代码验证: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script type="text/javascript" src="https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></script> </head> <body> <div id="app"> <p>{{ message }}</p> </div> <script type="text/javascript"> var app = new Vue({ el:'#app', data:{ message:"Toney is a girl" }, beforeCreate:function(){ console.group('beforeCreat 创建前的状态======》'); //控制台输出的语句产生不同的层级嵌套关系 console.log("%c%s","color:red","el : "+this.$el); //undefined, %c字符%s字符串 console.log("%c%s","color:red","data : "+this.$data"); //undefined