暂未完成
管道实现本地CMD创建进程的3中方式:
WinExec()
ShellExecute()
CreateProcess()
项目如下:
进程间通信有很多种
管道(1.匿名管道2.命名管道)
邮件槽
剪切板
消息
共享内存
本地socket
同步事件
文件
等等
父子间通信,通过命令行相当于单次通信(由父到子)
今天用管道。
匿名管道(Anonymous Pipes)是在父进程和子进程间单向传输数据的一种未命名的管道,只能在本地计算机中使用,而不可用于网络间的通信。
linux a–>| –>b a程序通过管道给b程序数据流
windows netstat -an | find “80”
上面的解释:netstat -an输出所有端口的结果通过管道”|把结果作为输入,给find “80”命令来处理
windows管道(英语pipe):将a程序的数据发给b程序
CreatePipe 创建管道的api
该函数创建一个匿名管道,返回一个读和写管道的句柄
匿名管道是单向的,命名管道是双向的。
12345678910111213141516 ...
Q:什么是句柄?
A:当一个进程创建或者打开一个内核对象时,将获得一个句柄,通过这个句柄可以访问内核对象。
句柄表为什么要有句柄?
句柄存在的目的是为了避免在应用层直接修改内核对象
[[windows开发#句柄表|windows开发笔记中也有句柄表的知识]]
1HANDLE g_hEvent = CreateEvent(NULL,TRUE,FALSE,NULL);
如果g_hEvent存储的就是EVENT内核对象的地址,那么就意味着我们可以在应用层修改这个地址,一旦指向了无效的内核内存地址就会蓝屏。
因此微软设计了一张表
windows的设计理念:
隐藏内核对象指针
句柄就是个索引
句柄表只存放有内核对象的句柄,窗口句柄并非内核对象句柄,是个用户对象。
局部句柄表继承私有的句柄表
逆向NtOpenProcess有句柄表相关
句柄表在哪里
_HANDLE_TABLE结构体描述句柄表的信息
12345678910111213141516kd> dt _HANDLE_TABLE nt!_HANDLE_TABLE +0x000 TableCode : U ...
事件等待
并发是指多个线程在同时执行:
单核(是分时执行,不是真正的同时)
多核(在某一个时刻,会同时有多个线程在执行)
同步则是保证在并发执行的各个环境中可以有序的执行
不同版本的内核文件
单核
ntkrnlpa.exe 2-9-9-12分页
ntoskrnl.exe 10-10-12分页
多核
ntkrnlpa.exe 2-9-9-12分页
ntoskrnl.exe 10-10-12分页
同样是这个文件名,单核和多核里面的代码是不一样的
为什么需要事件等待首先需要明确计算机的核心数和线程数
超线程技术 : 逻辑核心 = 物理核心 * 每个核心的线程数(此线程数是可真正并行的线程数)
操作系统创建的线程是通过对逻辑核心的分片来虚拟出的线程,因此可以存在无数个
单行代码原子操作也称为原子指令
LOCK指令123mov eax,[0x12345678]add eax,1mov [0x12345678],eax
如果产生线程切换就会出问题,因此是多线程不安全的
1INC DWORD ptr ds:[0x12345678]
如果只有单核在跑,上述指令是安全的, ...
Q:什么是保护模式?
A:x86 CPU的3个模式:
实模式
保护模式(虚拟8086模式)
系统管理模式
现在的操作系统大多数都是运行于保护模式下的
保护模式就是指给操作系统添加的保护特性,保护的目标是硬件资源和OS内核。
学习前的环境配置由于本人使用的操作系统是win10 1909,因此开发当前版本的驱动需要vs2019+Windows 10 WDK 2004(10.0.19041.1) + Windows 10 SDK 2004(10.0.19041.1)
或者10.0.18362.1版本,vs安装要设置C++的桌面开发,通用Windows平台开发(勾选Windows 10 SDK(10.0.18362.0)),Visual Studio拓展开发,完事了wdk也安装10.0.18362版本
vs2019版本安装链接跳转
要注意在单个组件中选上:
环境配置的参考网址
【小注意点】微软官网下载vs2019时有bug,必须等他一段时间弹出下载,不要再点重新下载,不然重新下载的是vs2017,而不是vs2019
下载完毕后,再到微软官网下载Windows 10 WDK 20 ...
nas方案前提:路由器要全千兆网口和网线(对应机械硬盘)
原因:数据有一定的私密性,服务不对外,外联网速达不到上云的要求
合适位置:温度可控,清洁,稳定,安全
网线:
机械硬盘:(寿命最少6年)
西部数据企业盘 8T 1248 10T 1578 1678(氦气盘) 12T 1939(backblaze)
https://item.jd.com/8703756.html#crumb-wrap
希捷(希捷的ES系列)4T 850 6T 1079 8T 1249 10T 1828(氦气盘)
https://item.jd.com/100012134646.html#crumb-wrap
netapp
东芝的mg系列
nas服务器:
emc
群晖 DS920(4700)
威联通 TS-453Dmini(3700)
microserver gen8
https://www.synology.cn/zh-cn/products/series/home
https://www.qnap.com.cn/zh-cn/product/series/ente ...
标准模板库(STL)
STL概述长久以来,软件界一直希望建立一种可重复利用的东西,以及一种得以制造出”可重复运用的东西”的方法,让程序员的心血不止于随时间的迁移,人事异动而烟消云散,从函数(functions),类别(classes),函数库(function libraries),类别库(class libraries)、各种组件,从模块化设计,到面向对象(object oriented ),为的就是复用性的提升。
复用性必须建立在某种标准之上。但是在许多环境下,就连软件开发最基本的[[数据结构]] 和[[算法]]都未能有一套标准。大量程序员被迫从事大量重复的工作,竟然是为了完成前人已经完成而自己手上并未拥有的程序代码,这不仅是人力资源的浪费,也是挫折与痛苦的来源。
为了建立[[数据结构]]和[[算法]]的一套标准,并且降低他们之间的耦合关系,以提升各自的独立性、弹性、交互操作性(相互合作性,interoperability),诞生了STL。
STL基本概念**STL(Standard Template Library,标准模板库)**,是惠普实验室开发的一系列软件的统称。现在主要 ...
此处记录一些hexo相关操作
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
记录一些hexo部署操作gitalk的部署参考
hexo版本: 6.3.0
next版本: 7.8.0
下面部署步骤基于以上版本
长代码折叠功能原始参考链接
由 jQuery 选择器选择代码模块.highlight相关的DOM节点,给超过某个高度的代码模块添加展开收起的盒子,让盒子实现展开隐藏效果。
操作步骤:
添加code-unfold.js
由于是在next主题中添加js逻辑,所以我们新建code-unfold.js放置在了themes/nex ...
此处记录prism框架的方方面面
MIT开源地址
Prism 是一个用于创建模块化和易于维护的应用程序的框架,它主要起到以下作用:
支持 MVVM 模式:提供了一些工具和类来帮助开发人员实现 MVVM 模式,使视图和模型之间的耦合度降低,提高了代码的可维护性和可测试性。
提供依赖注入容器:可以方便地管理应用程序中的依赖关系,使代码更加简洁和易于理解。
支持模块化开发:可以将应用程序拆分成多个模块,每个模块可以独立开发、测试和部署,提高了开发效率和代码的复用性。
提供导航和视图切换功能:可以方便地实现应用程序中的导航和视图切换,使应用程序的用户体验更加流畅。
支持多种平台:除了 WPF 平台,Prism 还支持其他平台,如 UWP、Xamarin.Forms 等,使开发人员可以在不同的平台上使用相同的框架和技术。
Prism在vs2019已经下架了,在vs2022上架
Getting Started | Prism (prismlibrary.com)
包含如下内容
Region(区域管理)
Module(模块)
View Injection(视图注入)
ViewModelL ...
此处记录一些摄像头监控相关知识
音视频基础知识记录参考链接
视频流程全解1234567891011121314graph LR A[数据] --> B[解协议] B --> C[封装格式数据] C --> D[解封装] D --> E[音频压缩数据] E --> G[音频解码] G --> I[音频原始数据] I --> K[视音频同步] K --> L[音频驱动/设备] D --> F[视频压缩数据] F --> H[视频解码] H --> J[视频原始数据] J --> K K --> M[视频驱动/设备]
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数 ...
什么是可执行文件
可执行文件(executable file)指的是可以由操作系统进行加载执行的文件。
可执行文件的格式:
windows平台:PE(Portable Executable)文件结构
Linux平台:ELF(Executable and Linking Format)文件结构
哪些领域会用到PE文件结构
病毒与反病毒
外挂与反外挂
加壳与脱壳(保护与破解)
无源码修改功能,软件汉化等等
如何识别PE文件
PE文件的特征(PE指纹)
分别打开.exe .dll .sys 等文件,观察特征前2个字节
UE二进制方式打开文件,前两个字节是4D 5A表示得字符是MZ,然后0x3c的地址处如果说是E0 00 00 00,就到000000E0地址处查看前两个字节是不是50 45,表示得字符是PE,如果上述的都满足,就说明这个文件是PE文件。
不要仅仅通过文件名的后缀名来认定PE文件(因为后缀名是可以改的)
PE文件结构
DOS部分是历史遗留问题,以前是DOS系统
PE文件头是给windows用的
节表,当前文件一共分成多少部分,就是一个索引目录
节数据,存具体 ...