- 博客(127)
- 资源 (37)
- 收藏
- 关注
原创 守护进程和线程
共享 ./text./data ./rodataa ./bsss heap ---> 共享【全局变量】( errno)daemon 进程。通常运行与操作系统后台,脱离控制终端。一般不与用户直接交互。ps -Lf 进程 id ---> 线程号。LWP --》 cpu 执行的最小单位。进程:有独立的 进程地址空间。分配资源的最小单位。线程:有独立的 pcb。没有独立的进程地址空间。不受用户登录注销影响。通常采用以 d 结尾的命名方式。某个事件发生或周期性执行某一动作。独享 栈空间(内核栈、用户栈)
2023-03-31 14:20:46 129
原创 临界区死锁和死循环
1.临界区使用CRITICAL_SECTION 结构来保证不会有多个线程重入被保护的代码段实现在用户态的同步机制,相对内核对象来说,开销更小适用于同步同一进程内的多个线程如:CRITICAL_SECTION g_cs;EnterCriticalSection(&g_cs);//以原子方式访问共享资源LeaveCriticalSection(&g_cs);RTL_CRITICAL_SECTION 结构如下:struct RTL_CRITICAL_SECT
2022-01-07 14:20:07 748
原创 建造者模式
1.建造者模式建造者模式,又叫生成器模式,是一种对象构建模式,它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式的四个角色:Product(产品角色):一个具体的产品对象。 Builder(抽象建造者):创建一个Product对象的各个部件指定的接口/抽象类。 ConcreteBuild
2021-06-23 20:54:35 69
原创 原型模式(Prototype)
1.原型模式(Prototype)原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。所有的原型类都必须有一个通用的接口, 使得即使在对象所属的具体类未知的情况下也能复制对象。 原型对象可以生成自身的完整副本, 因为相同类的对象可以相互访问对方的私有成员变量。原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。通俗的讲就是当需要创建一个新的实例化对象时,我们刚好有一个实例化对象,但是已经存在的实例化对象又不能直接使用。这种情况下拷贝一个现
2021-06-23 17:32:20 122
原创 工厂模式
1.工厂模式工厂方法模式是一种创建型设计模式, 其在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型。1.1简单工厂模式简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为。在软件开发中,当我们会用到大量的创建某种、某类或者谋批对象时,就会使用到工厂模式。 /* 关键代码:创建过程在工厂类中完
2021-06-23 16:51:52 68
原创 单例模式(Singleton)
1.单例模式(Singleton)单例是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。单例拥有与全局变量相同的优缺点。 尽管它们非常有用, 但却会破坏代码的模块化特性。在某些其他上下文中, 你不能使用依赖于单例的类。 你也将必须使用单例类。 绝大多数情况下, 该限制会在创建单元测试时出现。实现单例模式必须注意一下几点:单例类只能由一个实例化对象。 单例类必须自己提供一个实例化对象。 单例类必须提供一个可以访问唯一实例化对象的接口。单例模式分
2021-06-23 16:50:32 238
原创 类之间的关系:依赖、泛化、实现、关联、聚合、组合
类之间的关系有:依赖、泛化、实现、关联、聚合、组合。类图的六大关系依赖依赖关系是指类中用到了对方。可以是“类的成员属性”、“方法的返回类型”、“方法接收的参数类型”和“方法中使用到的类”。对应的类图: class PersonServiceBean { private : PersonDao personDao; public: void save(Person person) { }...
2021-06-23 16:49:22 2750
原创 认识设计模式
1.认识设计模式1.1什么是设计模式“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”。 ——Christopher Alexander设计模式,就是对经常出现的软件设计问题的成熟解决方案。很多人把设计模式想象成非常高深的概念,实际上设计模式仅仅是对特定问题的一种惯性思维。笔者见过一些学员喜欢抱着一本设计模式的书研究,以期成为一个“高手”,实际上设计模式的理解必须以足够的代码积累量作为基础,最好是经历过某.
2021-06-23 16:40:20 140
原创 CPU-控制寄存器
控制寄存器有5个,分别是Cr0 Cr1 Cr2 Cr3 Cr4Cr1: 保留Cr3:页目录基地址寄存器,用来切换和定位当前正在使用的页表。Cr0 寄存器:结构图:PE 位:启用保护(Protection Enable)标志PE=1 :保护模式PE=0: 实地址模式这个标志仅开启段级保护,而没有启用分页机制若要启用分页机制,那么PE和PG标志都要置位PG 位:分页机制标志PG=1 :开启了分页机制PG=0:未开启分页机制在开启这个标志之前必须..
2021-04-24 23:13:34 1112
原创 段描述符S位,TYPE域
段描述符S位,TYPE域S=1,表示代码段/数据段;S=0,表示系统段。Type 类型描述如下表: 类型域 描述 十进制 数据段 E W A 0 0 0 0 0 只读 ..
2021-03-12 15:35:18 204
原创 代码间的跳转
1.代码间的跳转(段间跳转,非调用门之类的)段间跳转有2 种情况,即要跳转的段是一致代码段还是非一致代码段。同时修改CS与EIP的指令JMP FAR/CALL FAR /RETF /INT /ITETED注意:只改变EIP的指令JMP /CALL /JCC /RET2. 代码间的跳转执行流程JMP 0x20 : 0x00412345 CPU 如何执行这行代码呢 ? (1).段选择子拆分0x20 对应的二进制形式 0000 0000 0010 0000RPL=...
2021-03-11 11:31:18 405
原创 段权限检查
段权限检查DPL 是段的权限属性,要想访问一个数据段,段选择子和CPU当前权限必须高于DPL。DPL:段的权限RPL:段选择子的权限CPL:CPU的权限,当前特权级CPLCPL(Current Privilege Level) :当前特权级 CS和SS中存储的段选择子后2位.3.DPL (Descriptor Privilege Level ) 描述符特权级别DPL存储在段描述符中,规定了访问该段所需要的特权级别是什么。通俗理解 :如果你想访问我,那么你应该具...
2021-03-05 14:45:08 226
原创 进程结构体EPROCESS
1、进程结构体EPROCESS每个windows进程在0环都有一个对应的结构体:EPROCESS 这个结构体包含了进程所有重要的信息。kd> dt _EPROCESS +0x000 Pcb : _KPROCESS +0x078 ProcessLock : _EX_PUSH_LOCK +0x080 CreateTime : _LARGE_INTEGER +0x088 ExitTime : _LARG...
2021-02-01 14:01:17 1886
原创 分析句柄表
一、什么是句柄当一个进程创建或者打开一个内核对象时,将获得一个句柄,通过这个句柄可以访问内核对象。如:CreateMutex、CreateEvent 、CreateThread 等函数就会返回一个HANDLE类行值,这种就叫句柄,对应着一个内核对象。调用CloseHandle 函数对应某个内核对象计数减一,当内核对象计数为0,这个对象就被销毁了。内核对象在内核存储,直接把地址给3环用很不安全,所以微软设计了句柄(HANDLE)给3环使用,句柄是一个整数,它的值除以4是句柄表的下标,通过下标能
2021-01-31 22:07:39 234
原创 Windows 内核(WRK)编译
引子WRK是微软于 2006 年针对教育和学术界开放的Windows内核的部分源码,WRK(Windows Research Kernel)也就是Windows研究内核,在WRK中不仅仅只提供了Windows内核模块的部分代码,其还提供了编译工具,也就是通过这个编译工具,你可以将你的WRK编译成一个EXE文件,也就是内核可执行模块,然后你可以利用这个EXE文件来取代操作系统本身的内核,这样的话,下次开机的时候操作系统所加载的内核就是您编译的那个EXE...
2021-01-31 14:56:47 1044
原创 段描述符与段选择子
段描述符与段选择子当写一个段寄存器的时候,只给了一个16位的数,但段寄存器有96位,那剩下的80位从哪里来的?GDT(全局描述符表) 和LDT(局部描述符表)gdt 数组中的每个元素都是一个段描述符。数组的索引号是段选择子。这个 gdt 数组被称为 gdt 表。Gdtr 存储 GDT 表的基址,查看gdt一、段描述符结构如图:BASE: 段基址,由上图中的两部分(BASE 31-24 和 BASE 23-0)组成G:LIMIT的单位,该位 0 表示单位是字节,1表
2021-01-15 15:44:24 2441
原创 段寄存器
一、段寄存器有哪些 ?段寄存器有ES、CS、SS、DS、FS、GS、LDTR、TR共8个。通常我们用汇编读写某一个地址时,如下:Mov dword ptr ds:[0x123846],eax这时我们把eax 的值往地址去写,写的地址是:ds.base + 0x123456二、段寄存器的结构在x86下.我们可以看如下寄存器表示图. 寄存器名称 段选择子(Select) 段属性(Attributes) .
2021-01-15 12:46:20 11414
原创 系统非换页内存池的管理算法
Windows使用了两层内存管理。下层是基于页面的内存管理,仅限于执行体内部使用;上层建立在下层的内存管理工具基础之上,对外提供各种粒度的内存服务。两层结构如图:系统非换页内存池的管理算法MiInitializeNonPagedPool 和MiInitializeNonPagedPoolThresholds 初始化非换页内存池的管理信息。用于存放空闲页面链表头的MmNonPagedPoolFreeListHead 数组。数组的每一项都是一个MMFREE_POOL_ENTRY 结构。ty.
2020-12-30 15:34:21 242
原创 系统换页内存池的管理算法
系统换页内存池的管理算法换页内存池有两个,一个是系统全局范围的,一个是会话空间中的。起始地址分别位MmPagedPoolStart和MiSessionPoolStart。换页内存池有一个数据结构来描述其页面分配状态,定义如下:typedef struct _MM_PAGED_POOL_INFO { PRTL_BITMAP PagedPoolAllocationMap; PRTL_BITMAP EndOfPagedPoolBitmap; PMMPTE FirstPteFo...
2020-12-30 15:32:15 241
原创 执行体内存池的管理算法
执行体内存池的管理算法执行体内存池对象数据结构POOL_DESCRIPTOR,定义如下:typedef struct _POOL_DESCRIPTOR { POOL_TYPE PoolType; ULONG PoolIndex; ULONG RunningAllocs; ULONG RunningDeAllocs; ULONG TotalPages; ULONG TotalBigPages; ULONG Threshold;...
2020-12-30 15:31:20 199
原创 Windows引导过程
Windows引导过程 1 内核加载 在Intel x86系统上,Windows操作系统获得控制首先从硬盘的主引导记录(MBR,Master Boot Record)开始。MBR包含代码和数据,其代码称为引导代码,在系统引导时首先获得控制;MBR的数据时一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型。当MBR的引导代码被执行时,它检查并找到可引导的分区(引导分区),将引导分区的第一扇区(引导扇区)读到内存中。然后MBR的代码将控制权交给引导扇区的代码。引导扇区的代码给Windo.
2020-12-23 18:22:25 890
原创 Windows的用户/内核模式切换
1. Windows的用户模式-内核模式切换Windows用户模式和内核模式的交互流程,如图:以CreateFile 为例,应用程序调用kernel32.dll 的CreateFile来创建文件,CreateFile调用ntdll.dll的存根函数NtCreateFile,然后直接将创建文件的请求转交给内核的NtCreateFile。为了转到内核,ntdll.dll 的KiIntSystemCall或KiFastSystemCall 执行”int 2e”或sysenter指令,切换到内核模式下.
2020-12-23 11:11:32 1582
原创 Intel x86的用户模式-内核模式切换
1 Intel x86的用户模式-内核模式切换Intel x86 提供了“门(gate)”机制允许可执行代码从R3 进入R0 模式,以及从R0返回R3模式。Intel x86 支持调用门(call gate)、陷阱门(trap gate)、中断门(interrupt gate)和任务门(task gate)四种门描述符。Windows 使用中断门来实现模式切换,其中断号为0x2e。意思就是,当应用程序在用户模式下运行时,它通过”int 2e”指令,切换到内核中,IDT(中断描述符表)的0x2e表项指定.
2020-12-22 22:02:01 657
原创 Windows内核中的对象管理
1 Windows内核中的对象管理每个对象都分为对象头和对象体,定义如下:typedef struct _OBJECT_HEADER{ LONG PointerCount; //引用计数 union { LONG HandleCount; //指向该对象的句柄数 PVOID NextToFree; //对象被延迟删除时加入到一条链中 }; POBJECT_TYPE Type; /...
2020-12-17 10:52:08 381
原创 Windows子系统(GUI)
Windows子系统1 Windows子系统结构Windows子系统结构,如图:Windows子系统有用户模式和内核模式组件。列出这些组件的职责:a. 内核模块win32k.sys。是Windows内核的扩展。包含两大功能组成部分:窗口管理器(window manager): 负责控制窗口显示、管理屏幕输出、手机来自键盘鼠标和其他设备的输入,以及将用户信息传递给应用程序。 GDI:图形输出设备的函数库。b.图形设备驱动程序。c.Windows环境子系统进程(csrss.e..
2020-12-15 11:42:17 4917 3
原创 进程和线程的结束
进程和线程的结束在执行体层,线程的终止函数是NtTerminateThread,内部调用PspTerminateThreadByPointer完成终止处理。系统线程的终止函数是PsTerminateSystemThread,内部调用PspTerminateThreadByPointer完成终止处理。三个函数原型如下:NTSTATUSNtTerminateThread(_in_opt HANDLE ThreadHandle,_in NTSTATUS ExitStatus);N.
2020-12-12 16:45:52 704
WRK1.2 source
2020-02-04
WINDOWS2000.API.超级宝典+404个源代码.rar
2010-04-30
深入解析WINDOWS操作系统(第4版).part1.rar
2010-02-01
深入解析Windows操作系统(第四版)
2010-01-26
More+Effective+C++.pdf
2009-12-23
高质量c++c编程指南.pdf
2009-12-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人