windows进程与线程的底层实现
更多信息参见《Windows内核原理与实现》第三章。
特别强调:
笔记中的内容,与《内核情景分析》《Windows内核原理与实现》均有不同。
ReactOS是开源免费的Windows NT系列(含NT4.0/2000/XP/2003)克隆操作系统
WRK 是微软针对教育和学术界开放的 Windows 内核的部分源码
而笔记是基于Windows XP SP2/SP3 二进制文件.
微软并不开源,很多内核成员的作用需要自己去分析.
整个系统结构:
执行体只维护属性,内核只根据属性做事,内核层比执行体更接近底层
Ps开头的基本是执行体函数
KE,Ki开头函数开头的函数都是内核函数(一般KE是导出函数,Ki是不导出函数)
Nt开头的函数还是ntdll.dll那层
Windows内核重要变量
进程结构体进程结构体_EPROCESS每个windows进程在0环都有一个对应的结构体:_EPROCESS这个结构体包含了进程所有重要的信息。(PEB是三环关于进程信息的另一个结构体)
_EPROCESS结构体中的成 ...
基本介绍
Nginx 是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP缓存。该软件由俄罗斯程序员伊戈尔•赛索耶夫开发的开源框架,由c语言实现,并于2004年首次公开发布。2011年成立同名公司以提供支持服务。2019年3月11日,Nginx公司被F5网络公司以6.7亿美元收购。Nginx是免费的开源软件,根据类BSD许可证的条款发布。
作用
web服务器
解析http协议
反向代理服务器
了解反向代理的概念
邮件服务器
解析邮件相关的协议:pop3/smtp/imap
优点
高并发支持: 单机能够支持10W+的并发连接(取决于内存大小,极限能够到百万),那么在实际生产中也是非常能接近这个数字的,这主要得益于 nginx 在linux 环境下使用了 epol1 I0 多路复用模型。
内存消耗低: 在同类型 web 服务中,nginx 比 apache 占用的内存资源更少,在一般情况下 10K非活跃的 HTTP Keep-Alive 连接在 nginx中仅消耗 2.5M内存。
高扩展性: 低耦合的模块设计,并且有丰富的第三方模块支持 ...
Qt概述什么是QtQt是一个跨平台的C++图形用户界面应用程序框架。它为应用程序开发者提供建立艺术级图形界面所需的所有功能。它是完全面向对象的,很容易扩展,并且允许真正的组件编程。
Qt的发展史1991年 Qt最早由奇趣科技开发
1996年 进入商业领域,它也是目前流行的Linux桌面环境KDE的基础
2008年 奇趣科技被诺基亚公司收购,Qt称为诺基亚旗下的编程语言
2012年 Qt又被Digia公司收购
2014年4月 跨平台的集成开发环境Qt Creator3.1.0发布,同年5月20日配发了Qt5.3正式版,至此Qt实现了对iOS、Android、WP等各平台的全面支持。
当前Qt最新版本为 5.9.0(现在已经不是了)
支持的平台
Windows – XP、Vista、Win7、Win8、Win2008、Win10
Uinux/X11 – Linux、Sun Solaris、HP-UX、Compaq Tru64 UNIX、IBM AIX、SGI IRIX、FreeBSD、BSD/OS、和其他很多X11平台
Macintosh – Mac OS X
...
32位游戏逆向经验
口袋西游实战数组:追背包数量背包小血药地址:2A935D64
小血药数量地址=[[eax+ebx*4]+14]
此处继续追eax,ebx==5表示背包中第六个格子
10048580F |. 8B7424 1C mov esi, dword ptr [esp+1C] ; 小血药数量地址=[[[[esp+1c]+C]+5*4]+14]
小血药数量地址=[[[[ecx+AD8]+C]+5*4]+14]
1006522D1 |. 8B4C85 1C |mov ecx, dword ptr [ebp+eax*4+1C] ; 小血药数量地址=[[[[[[ebp+eax*4+1C]+8]+28]+0AD8]+C]+5*4]+14
此处eax为某种数组
小血药数量地址=[[[[[[[[[[ecx+1c]+68]+4]+8]+14+1C]+8]+28]+0AD8]+C]+54]+14
ecx==00D11A50(是个基地址)
万能控件ca ...
驱动开发理解
SDK software development kits(软件开发包) 如Visual Studio 2019(v142)
WDK windows driver development kits(驱动开发包) 如WindowsKernelModeDriver10.0
设置他们的位置在属性-配置属性-常规-平台工具集,但实际上无需手动设置,因为新建什么项目时vs都帮你自动配置好了
准备工作环境配置参考
创建Empty WDM Driver项目,生成的Driver Files文件中的inf后缀文件可以直接删除
在源文件中添加的必须是.c后缀的C语言文件。
项目配置中:
属性-C/C++中将警告视为错误选项设置为否
属性-链接器中将链接器警告视为错误设为否
由于使用的是windowsXP作为开发环境,所以要针对windowsXP进行项目配置,参考链接:开发各平台驱动的设置参考
如果建立的是KMDF项目的话,除了上述步骤,还可以将属性-Inf2Cat中Run Inf2Cat选项设置为否
制作不同系统的驱动,要设置属性-Driver Settin ...
盘点一些金融相关知识
信用卡全球六大信用卡组织
交易量排名: VISA > MasterCard > 银联 > AMERICAN EXPRESS > DISCOVER > JCB
发卡量排名: 银联 > VISA > MasterCard > AMERICAN EXPRESS > DISCOVER > JCB
商户接受度排名: VISA = MasterCard > AMERICAN EXPRESS > DISCOVER = JCB
不建议申请既是visa/MasterCard 又是银联的双标卡,网上支付的时候由于有银联特征存在,所以有可能被拒支付
推荐两张终生免年费的国际信用卡: 中国银行全币种国际芯片VISA白金卡
以下为本人待解决问题,有能解决的大佬看到,恳请帮忙解决一下,感激不尽。
1本人qq邮箱:503969402@qq.com
问题汇总问题1(已解决)开发环境:
Microsoft Visual Studio Community 2015版本 14.0.24720.00 Update 1Microsoft .NET Framework版本 4.8.03761
问题描述:
以下代码为什么出错?
代码如下:
123456789101112131415161718192021222324252627282930313233343536#include"iostream"#include <string>using namespace std;class Building{ friend void GoodGay::visit();public: Building() { m_SittingRoom = "客厅"; m_BedRoom = "卧室"; } string m_Sitting ...
API函数的调用过程Application Programming Interface,简称API函数。
Windows有多少个API:主要是存放在C:/WINDOWS/system32下的所有dll
几个重要的DLL
Kernel32.dll:最核心的功能模块,比如管理内存,进程,线程相关的函数等。
User32.dll:是Windows用户界面相关应用程序接口,如创建窗口和发送消息等。
GDI32.dll:全称是Graphical Device Interface(图形设备接口),包含用于画图和显示文本的函数。比如要显示一个程序窗口,就调用其中的函数来画这个窗口
Ntdll.dll:大多数API都会通过这个DLL进入内核(0环)
3环部分分析ReadProcessMemory12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455.text:7C8021D0 ; Exported entry 682. Read ...
正则表达式是一个强大的文本匹配工具
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符 ,及这些特殊字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑
正则表达式基本语法学习正则表达式跳转参考
图形化展示正则表达式匹配流程
转义字符所有的ASCII码都可以用 \ 加数字(一般是8进制数字)来表示.而C中定义了一些字母前加”"来表示常见的哪些不能显示的ASCII字符,如 \0, \t, \n 等.如:
表示ASCII -> 大写字母M(ASCII十进制值为77)
用8进制表示为: \0115
用十六进制表示: \x4d
C语言中字符的转义
\a 响铃
\b 退格
\r 回车
\n 换行
\\ 代表一个反斜杠
正则表达式中使用的一些具备特殊含义的特殊字符(若要表示原本的字符则要加转义字符在前面)
? + { } | ( ) [ ]
转义字符
描述
正则表达式
示例
\a
与报警 (bell) 符 \u0007 ...
硬编码
硬编码简介硬编码就是指令编码格式
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前缀指令
...