多态的原理:vptr 指针和 vtable 虚函数表

多态是 C++中的重要内容,也是设计模式的基础。

形成多态的几个基本条件为:

  • 继承和虚函数
  • 父类对象指向子类对象

多态形成的原理就是 vptr 指针和 vtable 虚函数表,当一个类中有虚函数时,编译器就会自动生成虚函数表,并生成一个 vptr 指针指向这个虚函数表。调用虚函数的时候,会通过这个 vptr 指针找到相应的虚函数表,然后再定位到对应的函数,以此来调用形成多态。

阅读更多

linux netstat 命令用法

netstat 是控制台命令, 是一个监控 TCP/IP 网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。 Netstat 用于显示与 IP 、 TCP 、 UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

阅读更多

linux 和 windows 双系统时间不同步问题

一、问题描述 安装 linux 双系统后,只要进入 linux 系统,windows 的系统时间就会错误。 二、解决方案

使用 mfoc+pn532 破解门禁卡、校园卡等

大四上学期的时候因为毕业设计接触到了 IC 卡破解,当时是花了一个星期的时间破解了学校了水卡、洗衣卡等,毕业后没有再玩过了。

前几天搬家没有门禁卡,每次都是在楼下苦等没有办法。不得已之下又又拿出工具试了试,才发现一年没用,差不多又忘完了。于是记录下流程,以备后用!

一、准备

  1. 了解 IC 卡的工作原理,目前仅支持 M1 卡破解,一般学校一卡通和水卡都是这种类型,可以尝试破解。地铁和公交卡一半则是 CPU 卡,无法破解。
  2. 一个读卡模块,PN532 模块+uart 转接头+卡片。
  3. 如果你是为了复制卡片,待复制的卡片最好为全扇区可擦除重写。

阅读更多

socket 多路 IO 复用之 select 模型

select 模型是 socket 中的一种多路 IO 复用模型之一,通过轮询的方式来完成多路访问控制。

一个很简单的例子来描述 select 模型:

幼儿园老师要照顾所有的小朋友,每天他都会轮流去问小朋友:「小朋友小朋友,你饿了吗?」

如果小朋友饿了,那么老师就给这个小朋友喂饭,否则就开始询问下一个朋友,一直循环下去直到放学。

同时,如果班级里有其他的同学来了,也把他加到询问队列。如果有哪个同学生病了,则把它踢出询问队列。

select 模型的原理就是这样,把所有连接的客户端 socket 加入到一个集合中去,然后一直不断轮询,判断哪一个 socket 有数据到达,就读取数据。否则继续轮询下一个数据。

linux 系统在编译的时候就固定了 select 模型文件描述符集合的大小为 1024 个,这个大小无法更改,因此,select 模型只适用于并发量小于 1024 个的服务连接。

阅读更多

TCP 协议中的三次握手和四次挥手

一、三次握手

TCP 协议的三次握手和四次挥手分别表示了 TCP 连接的建立和释放过程,在整个 TCP 协议是一个很重要的内容,同时也是面试时的常见考点。

趁着找工作的劲,使用 socket+tcpdump 分析了一下工作流程,socket 客户端代可以在 socket 介绍及函数原语找到。服务端的代码可以在 socket 的 select 模型找到。

socket 中各函数对应的 TCP 状态演示图:

阅读更多

tcpdump 的基本用法

参考:[linux 速成案例](/linux/linux-maintenance/quick-guide-of-tcpdump-html.html)

一、基本用法

最简单的用法就是直接输入 tcpdump,监控所有的数据包:

阅读更多

C++中的多态:virtual 关键字

面向对象的三大基本特征:封装、继承和多态。类对象通过 public/private/protected 关键字实现对象的封装,封装后通过继承实现多样性,而这个多样性又需要通过多态来完成。

假设要实现一个攻击的功能,不同的角色战斗力的都不同,在以往的 c 中,要完成这个功能需要对每个不同的角色都添加一个攻击函数:

而在有多多态后,所有的函数都可以合并为一个:

阅读更多

C++类对象的声明方式和注意事项

定义以下类:

阅读更多