概率论(3)
参数估计和置信区间计算。
引入很多老师都用这样的一个例子引入,假设我想知道全国身高的均值。这个值 $\mu$ 必然是客观存在的,但是给全国十四亿人全部测一遍显然这个工作量太大,对于学过数理统计的人来说,解决这个的最好的办法自然就是抽样。
理论极限中心定理告诉我们,当样本量足够大时,所有的分布最终都趋于正态分布,下图就是标准正态分布的概率密度图。
概率密度函数反映了概率在该点的变化率,变化率越大显然证明该点的概率越大(即样本值等于该值的概率越大)。
因此正态分布的特点就是:均值的概率最大,越远离平均值的数值被抽到的概率越小。
而我们是想通过抽象来获得总体的平均值,而样本平均值显然是不能等于平均值的,但是可以一定程度地反应,那么如何描述这个“一定程度”,就是使用显著性水平来描述。
例如,从图中我们可以看出,-2~2 区间内的值包含了 95% 的概率,也就是说绝对值 > 2 的可能性仅仅只有 5%,这个 5% 就是显著性水平 $\alpha$,对应的置信水平就是 $1-\alpha$,而如果能找到一个区间,使得该区间的概率刚好等于置信水平的最小区间称为置信区间。
举个例子就是: ...
游戏安全的学习(4)
游戏安全的学习(4)—— 猫里奥外挂编写。
这也就是一个单机游戏,如果游戏作者觉得侵权了可以联系删除。
游戏分析突然想起了之前一个很搞人心态的游戏,就是这个猫里奥,各种陷阱防不胜防,因此今天打算用点科技的力量去对抗这个东西。八关版的外挂已经有人做了,这里我用九关版的,下载地址。
坐标读取和修改首先最简单的就是获取坐标,使用CE反复横跳搜索内存,最终确定了 X 和 Y 坐标的地址分别是在 +78DDC 和 +78DE0 这两个地方,基于此可以做出一个读取坐标信息,修改的目的。
对应代码也非常简单。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980DWORD CCatMariGuaDlg::FindProcess() { HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNA ...
计算机网络复习(3)
数据链路层
数据链路层的功能在物理层的基础上向网络层提供服务,对网络层表现为一条无差错的逻辑链路。
提供的服务数据链路层可能提供以下的服务:
成帧:链路层封装IP数据报,帧的结构由链路层协议规定。
链路接入:媒体访问控制协议(Medium Access Control,MAC)规定了帧在链路上传输的规则.
可靠交付:如果链路层实现可靠交付,通常是通过确认和重传取得的。对于高比特差错的链路来说,链路层通常要实现可靠交付,比如无线传输链路而不是通过运输层或应用层协议迫使进行端到端的数据重传。对于低比特差错的链路来说,可靠交付将是不必要的开销,出于此,许多链路层协议不提供可靠交付服务。数据链路层可能提供无连接无确认的服务,有确认无连接的服务,或者是有连接有确认的服务。
检错和纠错:实际链路传输的时候,需要考虑是由信号衰减和电磁噪声导致的。上层也提供了有限的差错检测,也就是因特网检验和,IP校验了它的首部字段,TCP,UDP校验了全部字段。
数据链路基本概念:
链路(link):是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。
数据链路(data link):除了物理线路 ...
概率论(2)
大概讲解参数估计的概念。
极大似然估计这里引用一下Jason Eisner大神讲的一个例子,本篇文章近似对它的原文进行翻译。
概念这里有两个概念,似然函数和概率密度函数,先细细理解一下这两个概念
Probability and likelihood are closely related concepts in statistics, but they have slightly different meanings and uses.
Probability is a measure of the chance that an event will occur, typically expressed as a number between 0 and 1, with 0 indicating that the event is impossible, and 1 indicating that the event is certain.
A likelihood function is used to calculate the probability of observin ...
Windows驱动开发(12)——驱动附加进程读写内存
绕过句柄权限过滤的内存保护
句柄权限过滤在之前学的常规进程保护种,在驱动层是通过注册打开进程句柄的回调,通过过滤一些权限的方式防止其它进程对指定进程进行跨进程的一些操作,包括进程读写等等。
绕过思路它可以相当于是对用户层的 OpenProcess 这个 API 作了拦截,那么我们绕过的思路自然也很清楚,那肯定不能通过这个 API 再去获取句柄了,而是可以直接使用驱动附加进程,然后通过 R0 和 R3 通信的方式去读取内存,这里我们做一个简单的小测试,目前代码已经上传至 Github,供大家学习使用。这个里一共包含四个项目,分别对应了游戏程序,外挂程序,游戏驱动和外挂驱动。
这里有一个测试的小技巧,如果觉得每次测试驱动都要安装卸载麻烦,可以把加载驱动写在窗体初始化的时候,把卸载卸载窗体对象析构的时候。
在保护指定进程的时候,通过注册回调的方式过滤句柄权限,用的还是之前的代码:
123456789101112131415161718192021222324OB_PREOP_CALLBACK_STATUS MyProtect( PVOID RegistrationContext, ...
概率论(1)
常见的变量分布
随便记了,不是很想管格式。
主要记住一下常见的随机分布的函数和密度函数。
随机变量随机变量可以分为两种类型:离散随机变量和连续随机变量。
离散随机变量:离散随机变量的取值是可数的,通常表示为整数。它们描述了在离散事件中可能发生的不同结果,例如掷硬币的结果(正面或反面),骰子的点数(1、2、3、4、5或6)等。离散随机变量的概率分布由概率质量函数(Probability Mass Function,PMF)描述。
连续随机变量:连续随机变量的取值是连续的,可以是实数范围内的任意值。它们描述了在连续事件中可能发生的结果,例如测量温度、身高、时间等。连续随机变量的概率分布由概率密度函数(Probability Density Function,PDF)描述。
概率分布函数一般是这个函数是计算随机变量 < 某个值的概率。
不难看出,当变量趋于负无穷的时候,概率的极限为 0,概率趋于 1 的时候,概率的极限为 1。
对于连续的随机变量来说,变量取某个值的概率为 0。很经典的一个例子就是,在数轴 0 - 1 的位置上随机取一个实数,取得 0.5 的概率是多少,0-1上 ...
Windows驱动开发(11)——驱动内存属性读写
在R0层中Hook函数
R0层内存属性修改同样的R0层的内存也有读写保护,如果写了不可写的内存或者读了不可读的内存,此时会直接触发蓝屏。这里也是搜集到了一些修改 R0 层内存属性的方法,可以使用以下代码来修改内存属性:
123456789101112131415161718KIRQL WPOFFx64(){ KIRQL irql = KeRaiseIrqlToDpcLevel(); UINT64 cr0 = __readcr0(); cr0 &= 0xfffffffffffeffff; __writecr0(cr0); _disable(); return irql;}void WPONx64(KIRQL irql){ UINT64 cr0 = __readcr0(); cr0 |= 0x10000; _enable(); __writecr0(cr0); KeLowerIrql(irql);}
WPOFFx64函数可以关闭内存写保护,使我们可以写任何一块区域的内存, ...
数据结构复习(4)
第四章——串
字符串存储一般有定长空间分配法,不定长分配两种方式。
后者以 \0 字符来作为字符串结尾,前者需要再存储一个字符串长度,超出长度之外的字符是无效的。
串的模式匹配算法假设主串长度为 n,模式串长度为 m。
暴力匹配即对于每一个可能出现模式串的位置(n)对模式串进行匹配判断(m),时间复杂度显而易见的是 O(mn)。
KMP算法会构建一个 Next 数组,在匹配的时候,每一次失配,我们都让模式串指针跳转到 next[j] 的位置上去,主串位置不变。
构建Next数组的方法:
12345678910111213for(int i=1;i<n;i++){ int t=next[i]; while(t!=1&&s[i]!=s[t]){ t=next[t]; } if(s[t]==s[i]){ next[i+1]=t+1; } else{ next[i+1]=1; }}next[1]=0;
匹 ...
《被讨厌的勇气》读后感
很多人推这本书,看了之后感觉挺不错的,特此写读后感。
第一章我们的不幸是谁造成的?其实是自己。很多时候并不是因为曾经怎么怎么样,或者说现在怎么怎么样我们无法改变命运带来的结果,其实很多时候我们是可以改变的,只不过我们不愿意改变。
这里使用了乍一听非常难以接受的理论——目的论,我们的不幸是因为我们选择了不幸,阿德勒心理学主张人是可以改变的,你可以选择,但是没有足够的勇气!因为你知道你一旦做出改变,你可能要面对很多未知的问题,或者可能是要接受失败的结果,所以你选择了不成功。并因为你选择了不成功,你选择放大自己的缺点并会解释,如果自己没有这些缺点就好了。那只是你不愿意做出改变罢了,没有这样的勇气。
书中举了一个例子来佐证你以为的原因论,实际是目的驱使的:
家长在训斥自己的孩子的时候发怒,一般理解就是是因为女儿成绩不理想,所以家长才那么生气,家长的怒气完全是因为女儿的这个问题。如果说此时是因为家长想发怒而制造出来怒气可能有点诡辩论了,但是实际上在这个情景下,如果家长接到女儿班主任的电话,父母马上就会和颜悦色地去跟老师沟通,完全没有了之前的愤怒情绪。这里想要证明的一个观点是:愤怒是一种手段 ...
数据结构复习(3)
第三章——线性数据结构
栈身为 ACMer,其它基本也不用花太多时间记,只需要记一些没有见过的概念就差不多了。基本特性就是先进后出,常见应用就是函数调用,深度优先搜索(迷宫算法),递归函数,括号匹配,表达式扫描。
卡特兰数n 个不同的元素入栈,得到不同出栈结果的个数。
结论:$\frac{1}{n+1}C_{2n}^n$
共享栈指两个栈共用一个大数组,其中一个栈顺序增长,另一个栈反方向增长,更大程度避免上溢出,两个栈顶重叠的时候,栈满。
队列只允许从一端插入,另一端删除,先进先出。
有两种情况需要细致考虑:一个是头指针指向队尾元素,一个是头指针指向队尾的后一个位置,这两个情况略微有差别,此时队列判空判满的条件也有差别。
队头一般使用 head 或者 front,队尾一般使用 tail 或者 rear 变量。为了防止假溢出,出现了循环队列,但是要注意,循环队列需要牺牲一个单元,否则无法判断队满或者队空,因为它们的指针指向一模一样。
双端队列开放了其中一端插入或者删除,或者都开放。
做这个题目的时候,一般会出现输入限制或者输出限制的双端队列,然后问你,哪项出队顺序不符合或者符合。其实很 ...