摘要: 使用代码 lea ecx, [ebp+4+参数长度] 就可以实现。 如下图,理解栈帧的结构,很好理解。 虽然也是 push param的,但这部分在恢复时被调用函数会恢复的,因此这并不算esp的值。 我们在有些函数中,需要_CONTEXT或者_KTRAP_FRAME保存之前的现场,就可以看到这段汇编 阅读全文
posted @ 2019-11-03 21:27 OneTrainee 阅读(301) 评论(0) 推荐(0) 编辑
摘要: Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html CPU异常的记录(trap00为例) 一、CPU检测到除零异常的执行流程 二、Trap00 函数的分析 当发生除零异常时,查IDT表会查到Trap00函数,该函数的目 阅读全文
posted @ 2019-11-03 19:58 OneTrainee 阅读(1358) 评论(0) 推荐(0) 编辑
摘要: Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 用户APC的执行过程 一、一个启发式问题 有一个问题,线程什么时候检查自己的APC队列,答案前面已经介绍过,是执行KiServerExit函数时。 KiService 阅读全文
posted @ 2019-11-03 17:14 OneTrainee 阅读(1469) 评论(0) 推荐(0) 编辑
摘要: 存储在栈中的局部变量,都是按照 [ebp-x]的表示的。 注意结构体偏移 + 与栈中的 - 不要搞混。 结构体按照从高往低排序,这里的 - 可以被认为偏移+。 如果想找到某结构体 + 0xa的位置,即找到该结构体第一个元素,在 - 0xa 的位置。 如下图,_CONTEXT+c4 表示 esp,因此 阅读全文
posted @ 2019-11-03 15:23 OneTrainee 阅读(439) 评论(0) 推荐(0) 编辑
摘要: push a push b push c push d call xxx 则翻译过来为 xxx(d,c,b,a)。 我们分析时,将push从上往下看,push d 作为第一个参数。 因为你从下往上,你不确定一个push a到底是第几个参数,只能确定其右边最后一个参数。 而从上往下看,就能比较清楚了。 阅读全文
posted @ 2019-11-03 12:15 OneTrainee 阅读(402) 评论(0) 推荐(0) 编辑
摘要: ; 链表操作 将当前APC从用户队列中拆除eax表示该某个双向链表的节点struct node{ struct node * next struct node * last}mov ecx, [eax] [eax] Node->nextmov eax, [eax+4] [eax+4] Node->l 阅读全文
posted @ 2019-11-03 12:04 OneTrainee 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 按X键,即可列出哪个部分引用该函数。 阅读全文
posted @ 2019-11-03 09:57 OneTrainee 阅读(2923) 评论(0) 推荐(0) 编辑
摘要: Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 备用APC队列 占坑:这一节跟进程挂靠相关联,我们先把进程挂靠给学完,之后再来学习这里。 阅读全文
posted @ 2019-11-03 09:42 OneTrainee 阅读(283) 评论(0) 推荐(0) 编辑
摘要: Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html APC的本质 一、对于线程关闭问题的启发 线程,本身占据CPU,对CPU有直接控制权。 这就存在一个问题,如果一个线程不想关闭自己,则外界是无法干涉它的。 因此,线程 阅读全文
posted @ 2019-11-03 09:31 OneTrainee 阅读(1342) 评论(0) 推荐(0) 编辑
摘要: View - Open Subviews - Local Type - INSERT键 - 输入新结构体 - 右击"Synchornize to idb" 之后再分析处按 T 就可以看到该结构体,进行解析。 阅读全文
posted @ 2019-11-01 18:41 OneTrainee 阅读(1755) 评论(0) 推荐(0) 编辑