更新 2026.7.23win32813 字· 2 分钟 动态链接库 静态链接库的缺陷 链接时将函数加入到exe导致exe变大 在运行时对于不同进程他们所使用的同一个函数都会独占空间,造成资源浪费 怎么解决 利用之前学习过的内存知识,例如映射类型的内存块 将这些公共代码放在文件中没在进程运行的时候在加载该文件 并且在内存中只需要加载一边,不同进程使用同一份公共代码时,只需要将之前加载过的这个文件映射到自己内存中即可 …
静态链接库 如何创建静态链接库 vs新建项目,选择静态链接库 在项目文件中新建 .cpp 文件与.h 文件 项目编译生成后会产生一个 .lib文件
如何使用静态链接库 将生成的.h与.lib文件复制到项目根目录
直接添加.lib与.h到项目中
在项目代码中添加头文件引用
#include "xxx.h" #pragma …
更新 2026.7.23CPP · win32554 字· 2 分钟 以文件为后背存储区的内存交换文件 各种后备存储器的内存映射文件 以磁盘中文件系统的具体文件为后备存储的页交换文件(文件映射) 以页交换文件("虚拟内存")为后备存储器的页交换文件(共享内存) 页交换文件(虚拟内存) 通过CreateFileMapping api 创建文件映射内核对象,在内存中申请空间(物理内存和虚拟内存)
通过MapViewOfFile 在 …
更新 2026.7.23CPP · win32约 1.0k 字· 3 分钟 页交换文件与内存映射文件 内存的几种状态和类型 私有类型:
使用VitualAlloc申请分配/调拨内存后,申请的内存只能被当前进程使用。其他进程无法访问。这就是所谓的私有内存
映射类型 -> 页交换文件(虚拟内存)
页交换文件补充了我们的物理内存的不足。在内存中长时间不活跃的数据,系统会将内存写入页交换文件。用以节省内存,所以页交换文件也是计算机内存的一部 …
更新 2026.7.23win32512 字· 2 分钟 物理内存和虚拟内存的关系 进程容器中4GB空间的内容分布
在所谓的4GB空间内,系统内核占据了高2GB的空间,普通进程看不见摸不着,而且高2GB的空间是全局共享。全局就那么一份,各个进程间共享
观察进程内存分布,我们发现进程中真正使用的内存远远不到2gb,而且地址不是连续的。说明操作系统并不是一次性吧内存都给予进程
更新 2026.7.23CPP · win32783 字· 2 分钟 事件和线程同步 函数 //创建一个时间对象 HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SD 安全属性 BOOL bManualReset, // reset type 0自动复位(互斥)、1手动复位(通知模式) BOOL bInitialState, // initial …
更新 2026.7.23linux24 字· 1 分钟 ubuntu sudo 免密码 cd /etc/sudoers.d sudo touch nopasswd4sudo sudo vi nopasswd4sudo //输入 ubuntu ALL=(ALL) NOPASSWD : ALL ESC :wq!
更新 2026.7.23win32约 1.0k 字· 3 分钟 临界区、线程锁和互斥体 不可重入函数 不可重入函数: 当这个函数返回前,不可以被其他线程调用
原因:
printf : 访问了引用全局变量stdout malloc : 引用了全局内存分配表 free : 引用的全局内存分配表 类似的 假如我在我的线程中使用全局变量会不会出现类似问题?
坑:
当多线程同时去访问所谓不可重入函数的时候,当A线程调用printf …
更新 2026.7.23工具273 字· 1 分钟 vmware 6 虚拟化 全系列 序列号 vSphere 6 Hypervisor HY0XH-D508H-081U8-JA2GH-CCUM2
4C4WK-8KH8L-H85J0-UHCNK-8CKQ8
NV09R-2W007-08D38-CA956-33U28
JU400-6EK4L-080V9-QT8EP-2KAQ2
vSphere 6 …
更新 2026.7.23CPP · win32约 1.1k 字· 3 分钟 线程的创建和控制 进程和线程的关系:进程提供资源,线程使用资源完成工作
创建线程函数 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, // SD /安全属性 DWORD dwStackSize, // initial stack size //线程栈大小- …
更新 2026.7.23CPP · win32969 字· 2 分钟 句柄表和继承 句柄代表着备操作的对象
句柄的本质(handler) 句柄表可以看做一个非常大的结构体数组
句柄表的结构
索引值: 进程通过索引找到句柄表中对应的选项
内核对象地址: 通过地址直接找到对应的内核对象
访问掩码: 控制了访问权限
标志位: 标志改句柄能否被继承
句柄表是如何工作的:
每个进程的内核对象,都有一个句柄与之对应
操作对应进程,需要获得 …
更新 2026.7.23CPP · win32397 字· 1 分钟 ListView控件 实现简单进程管理 用到的相关api函数 //获取控件句柄 HWND GetDlgItem( HWND hDlg,//获得控件所处的窗口的句柄 int nIDDlgItem //控件id ); //初始化列表的列 (listview插入新的一列 int ListView_InsertColumn( HWNDhwnd, //控件的句柄 …
进程的遍历、获取与销毁 创建快照遍历 //获得进程所使用的堆,模块和线程的信息快照 HANDLE WINAPI CreateToolhelp32Snapshot ( DWORD dwFlags,//标志位 DWORD th32ProcessID //进程ID ) //dwFlags: 指定的快照中,指定需要拍的系统部分 TH32CS_INHERIT 声明快照 …
更新 2026.7.23CPP · win32628 字· 2 分钟 进程的创建 进程的启动过程 打开目标exe的映象文件 创建进程内核对象 映射NTDLL到内存 创建线程内核对象 通知子系统对进程进行管理 启动线程初始化空间和加载其他DLL 跳转到入口处开始执行 CreateProcess api BOOL CreateProcess( LPCTSTR lpApplicationName, // name of …
更新 2026.7.23CPP · win32318 字· 1 分钟 进程和线程 什么是进程? 进程和普通计算机程序的区别 进程 是运行中的程序 进程 活在内存中 有血有肉有灵魂 程序 死在 硬盘上的 有肉没血没灵魂 如果进程是空间的概念,那么这段空间里有什么? 如果进程是空间概念,那么进程是怎么工作的? 进程和线程的关系 进程: 提供了必要的资源和空间
线程: 使用进程中的资源完成工作的工作人员
关系: 进程提供资源,线程使 …
更新 2026.7.23win32181 字· 1 分钟 窗口与事件 窗口 什么是窗口? Windows中称为视窗,是一个程序的操作显示界面
窗口执行动作是由什么驱动的? Windows中通过什么机制将发生的一些动作和响应的响应函数连接起来
事件消息机制
事件 用户操作或者Windows系统自身所产生的动作就是发生了什么,事件总是和一个ID有关
消息 就是用于描述某个事件所发生的信息 消息就是 你该干什么了
更新 2026.7.23win32292 字· 1 分钟 API与宽字符 API(Application Programming Interface,应用程序编程接口) Api的定义 api就是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或者硬件的一访问一组例程的能力,而又无需访问源码,或者理解内部工作机制的细节
WindowsAPI的定义 WindowsAPI是一套用来控制windows的各个木粉的 …
更新 2026.7.23win32 · 逆向412 字· 1 分钟 win32中的宽字符 宽字符 数据类型 容器、模板 ASCII 一个字符 一个字节 GB码(扩展了的ASCII) 英文字符 一个字节 GB码 中文字符 两个字节 UNICODE字符集(unicode编码实际指的是utf-16) 常用字符 两个字节 宽字符: 用多个字节来表示的字符称之为宽字符(只要不是以单字节存储都可称为宽字符)
更新 2026.7.23win32361 字· 1 分钟 兼容问题 由于ASCII存在字符含量过少的缺陷,所以不但我国自己搞出了国际码。其他国家也都设计出了符合自己国情的字符集
但是这就带来了问题
各个字符集之间不兼容怎么办?
Unicode Unicode 4个字节32位
真正有效范围: 0x0 – 0x 10ffff
约十进制:1114112 个字符
unicode相当于 “区位码”(也就是电脑中运行的),实际 …
更新 2026.7.23win32361 字· 1 分钟 GB2312原文到GB2312机内码 ANSCII 汉字编码国家标准 区位码 01-09区 为特殊字符区
10-15区 为自定义区
16-87区 为汉字编码区
兼容演变: 1. 区位码标准中没有定义控制字符 解决方案: 将整个区位码向后移动32位(具体表现为每一字节都加上0x20)得到GB2312原码(国标码) 2. 原版ASCII与我们的初版国际码不兼容 …