正则表达式是一个强大的文本匹配工具
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符 ,及这些特殊字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑
正则表达式基本语法学习正则表达式跳转参考
图形化展示正则表达式匹配流程
转义字符所有的ASCII码都可以用 \ 加数字(一般是8进制数字)来表示.而C中定义了一些字母前加”"来表示常见的哪些不能显示的ASCII字符,如 \0, \t, \n 等.如:
表示ASCII -> 大写字母M(ASCII十进制值为77)
用8进制表示为: \0115
用十六进制表示: \x4d
C语言中字符的转义
\a 响铃
\b 退格
\r 回车
\n 换行
\\ 代表一个反斜杠
正则表达式中使用的一些具备特殊含义的特殊字符(若要表示原本的字符则要加转义字符在前面)
? + { } | ( ) [ ]
转义字符
描述
正则表达式
示例
\a
与报警 (bell) 符 \u0007 匹配
\a
匹配 “ ...
硬编码
硬编码简介硬编码就是指令编码格式
x64比x86主要是多了一组指令前缀,还有比如地址偏移和立即数可以允许8个字节(x86只允许最多4个)
这里学习的主要是x86
无论是x86还是x64的指令格式,都是最短一个字节,最长15个字节
硬编码转换为汇编语言的过程叫反汇编
哪些人需要学习硬编码
病毒与反病毒
加密与破解
外挂与反外挂
所有与计算机底层相关的行业都需要学习
汇编指令有六部分构成
Prefix—-指令前缀(可选项)
Opcode—-操作指令(必选项)
Mod R/M—操作数辅助说明(可选项)
SIB—-Mod R/M辅助说明(可选项,但是出现Mod R/M 这个必须有)
Displacement—操作数作为内存地址时用来表示位移(可选项)
Immediate —-表示操作数为立即数(可选项)
前缀指令(Instruction Prefixes)该指令是可选的,最多可以在每组中选一个,最少可以什么都不写。并且前缀指令和顺序没关系
在od中会把前缀指令和后面的指令中间加上冒号:方便用户识别
前缀指令分组
LOCK和REPEAT前缀指令
...
暂未完成
管道实现本地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 ...