事件
要点回顾在之前的文章中学习过,线程在进入临界区之前会调用WaitForSingleObject或者WaitForMultipleObjects,此时如果有信号,线程会从函数中退出并进入临界区,如果没有信号那么线程会将自己挂入等待链表,然后将自己挂入等待网,最后切换线程。
其它线程在适当的时候,调用方 ...
WaitForSingleObject函数分析
前言前一篇文章学习了线程等待与唤醒机制。了解到无论可等待对象是何种类型,线程都是通过调用函数WaitForSingleObject或WaitForMultipleObjects进入等待状态的,这两个函数是理解线程等待与唤醒机制的核心。本篇以WaitForSingleObject为例,从函数执行流程的 ...
线程等待与唤醒
前言前面学习了如何自己实现临界区以及什么是Windows自旋锁,这两种同步方案在线程无法进入临界区时都会让当前线程进入等待状态,一种是通过Sleep函数实现的,一种是通过让当前的CPU“空转”实现的,但这两种等待方式都有局限性:
通过Sleep函数进行等待,等待时间该如何确定?
通过“空转”的方式 ...
临界区&自旋锁
前言本篇开始,进行同步章节的知识点学习,主要内容包括Windows的种种同步机制,包括自旋锁、临界区、事件、互斥体等。由于在驱动章节末篇,已经学习过一遍多核同步的部分内容(临界区、自旋锁),这里就不再重复,仅作重定位。
多核同步之临界区多核同步之自旋锁
用户APC执行过程
前言在前一篇分析了内核APC执行过程,本篇开始分析用户APC执行过程,处理用户APC要比内核APC复杂的多,因为,用户APC函数要在用户空间执行,涉及到大量换栈的操作:
当线程从用户层进入内核层时,要保留原来的运行环境,比如各种寄存器,栈的位置等等(_Trap_Frame),然后切换成内核的堆栈,如 ...
Android文件格式:库文件
前言Android系统中最常见的文件应属APK安装包。在开发与逆向分析APK程序时,会涉及APK安装包内部其它文件的结构,了解了这些结构后,在逆向分析的过程中能更好的作出判断。本篇从Android库文件开始,通过学习《Android软件安全权威指南》上的内容,将会陆续更新常见的Android文件格式 ...
内核APC执行过程
前言前一篇介绍了APC会在何时被执行,内核APC会在线程切换时执行,用户APC会在0环返回3环时执行。无论是内核APC还是用户APC最终都会被函数KiDeliverApc处理,区别在于传入的参数不同。本篇从内核APC执行的角度来分析一下KiDeliverApc函数。
KiDeliverApc函数原型 ...
APC执行时机
前言在学习了APC挂入过程后,按顺序接下来就该探究APC的执行过程了,但是在这之前,还需要了解一件事,就是APC何时执行。
内核APC执行时机了解完APC执行时机,才能跟进探究APC的执行过程,本篇先从内核APC开始。
SwapContext首先观察SwapContext函数,之前的文章分析Swap ...
adb&Root
Android调试桥(adb)什么是Android调试桥Android调试桥(adb)是一种功能多样的命令行工具,可让客户端(例如PC)与设备(真实机/Android虚拟机)进行通信。adb命令可作用于执行各种设备操作(例如安装和调试应用),并提供对Unix shell的访问权限(可进入root模式 ...
Dalvik指令集
前言在前一篇中,学习了Dalvik可执行指令格式,对Dalvik指令有个大概的认识,本篇就在此基础上,学习并整理Dalvik指令集相关内容。
自Android 4.4以来,可以在Android的源码文件art/runtime/dexinstructionlist.h中找到系统支持的完整的指令集定义。 ...