- 字符串处理
strcpy
和wcscpy
不安全,是因为无法判断缓冲区最大长度的参数,不知道是否会破坏内存 - 一个进程—》 一个内核对象+一个地址空间
- 每个对象只是一个内存块
- 文件地址包括字节偏移量。实际地址=段首地址+字节偏移量,原因是因为,地址占的内存大小太大,而一段的大小无法满足要求,所以需要在通用寄存器中开辟一段内存,用于存放剩余的字节地址,所以其为偏移量。
- 内核对象的数据结构只能由操作系统来访问。
- 内核对象中,包含使用计数,每创建一个对象后,使用计数+1,一旦对象的使用计数为0时,则系统销毁对象。
- 调用API注意权限的设置,即是否拥有查询,或者写入写出权限
- 进程初始化时候,系统将会为其分配句柄表
- 句柄表主要包括:1.指向内核对象内存块的指针,访问掩码:即设置权限读取写入,所有权限等等
**创建对象流程:**初始化一个内存块,内核扫描空的句柄表,进行初始化。 - CloseHandle进行的操作:1.检查是否该句柄为进程中可以访问的对象,2.系统内核对象中的使用计数降为0,当为0的时候,可以进行销毁操作。
- 文件映像对象(共享内存实质)
- 当复制句柄表的记录项时候,系统还是会递增内核对象的使用计数。
- 内核对象的内容被保存在内核地址空间中,所有进程都拥有这个空间
- 终端服务命名空间
- 专有命名空间
进程
- 进程主要包括两部分:内核对象和地址空间
地址空间:代码和数据,动态内存分配等等 - 每个进程都有一个与它关联的环境块
- 系统信任级别:低、中、高、系统权限
- 用户界面特权隔离,防止SendMessage或者PostMessage。windows挂钩拦截完整性级别较高的进程的消息
作业
- Job类似于沙箱一个容器,可以存放多个进程运行,并且可以对进程进行限制等操作
- CreateThread:系统会创建一个内核对象,这个线程内核对象不是线程本身,而是一个小的数据结构