C++类模板
类模板语法和函数模板的写法一样,在template的下一行紧跟一个类,就是类模板。
1234567891011121314151617#include<iostream>#include<string.h>using namespace std;template<class typeAge,class typeName>class Person{ public: Person(typeAge age,typeName name){ this->_age = age; this->_name = name; } typeAge _age; typeName _name;};int main(){ Person<int, string> p(20,"Tom");}
类模板特点类模板没有自动类型推导的使用方式。
类模板在模板参数列表中可以有默认 ...
C++函数模板
模板的概念模板就是建立通用的模具,大大提高复用性。
模板不可以直接使用,他只是一个框架,模板的通用并不是万能的。
函数模板函数模板的作用:建立一个通用函数,其返回值和形参类型可以不具体制定,用一个虚拟的类型来代表。
12template<typename T>函数声明或定义
template :声明创建模板
typename:表示其后面的符号是一种数据类型,可以用class替代
T :通用的数据类型,名称可以替换,通常大写字母
写一个swap的函数模板
1、自动推导类型
123456789101112//函数模板template<typename T>void MySwap(T &a,T &b){ T temp = a; a = b; b = temp;}void test(){ int a=10,b=20; MySwap(a,b);}//自动推导类型
2、显示指定类型
123456789101112//函数模板template<typename T>void MySwa ...
C++多态和文件读写
多态多态是C++面向对象三大特效之一
多态的基本概念多态分为两类:
静态多态:如函数重载,运算符重载
动态多态:派生类和虚函数实现运行时多态
静态多态和动态多态的区别:
静态多态的函数地址早绑定,编译阶段确定函数地址
动态多态的函数地址晚绑定,运行阶段确定函数地址
补充:子类可以成为父类的引用,例如当一个函数传入父类的引用时,在调用函数时可以传入子类。
举个例子讲讲什么是动态多态,什么又是地址晚绑定。例如,当我们创建一个动物类(父类)时,在类内写了一个void函数void what( ),输出I am animal,这时我们再写一个子类猫,在猫类内也写一个同名的函数输出I am cat。这时写一个传入父类引用的函数,调用函数时传入子类猫。正常来说,此时函数会输出I am animal,这个属于静态多态,函数what 的地址早在编译阶段就绑定animal.what( )里的I am animal了。
我们自然是想要输出I am cat 的,这时候就要用动态多态,让地址晚绑定,在运行阶段时绑定地址,根据具体的子类执行对应的函数。
要满足动态多态的条件 ...
beginCTF
前言这次不太好评价,感觉对我来说是降维打击,首先感谢队里的所有朋友们,是你们的陪伴和互助我才能坚持下去。
0x01红白机看文件标题,猜测是6052汇编语言,作为上世纪的古老汇编,我自然是看不懂的,这里有个网址能运行6052汇编
如果感兴趣还有教学,该博客对6052汇编的介绍还是有理有据的。
flag{6502_I_LOVE_u}
0x02xor出题人说是简单的异或,我点进去一看一坨,不想看了,既然说是异或那就用异或试试看。
找到这个极其可疑的字符串
点进去打个断点调试,要你输入flag时,就把这串字符串输入进去,结果肯定是错的,但是由于异或的可逆性,这时候查看enc的值,就是正确的flag,手抄下来得到答案(偷懒取巧的做法,不可取:( )
flag{Virus_gonna_be_terminated!}
0x03real checkin xor借这又一道异或题记录一下静态做法,这题的函数相比之下就人性化许多了,一眼能看出加密过程
记录一下源码
12345678910111213def verify_func(ciper,key): encrypted = [] fo ...
C++继承
C++继承本节介绍C++的继承和多态的语法
继承方法一图解
继承中的对象模型一句话,在继承中,父类的私有成员只是被隐藏了,占存储空间,还是会被继承下去。
12345678910111213141516class Base{ public: int a; protected: int b; private: int c;};class Son: public Base{ public: int d;};void test(){ std::cout<<sizeof(Son)<<endl; //输出16 }
构造和析构的顺序构造和析构的顺序,先构造父类,再构造子类;先析构子类,最后再析构父类
同名成员处理当子类和父类出现同名的成员时:
若访问子类同名成员,直接访问即可;若访问父类同名成员,需要加作用域。
123456789101112131415161718192021class Base{ public: Base(){ a=100; } int a; ...
GeekChallenge 2023 re wp
前言感觉有点尴尬,这个wp并不全,因为本人打算在比赛结束后写出此文,然后发现靶场的题全下完了,然后自己也没有备份,呃呃怎么办呢?只能凭印象了,想到哪道题就写哪道题罢,然后Ida的界面的东西也没有(因为题目被我删了)只剩解密脚本了凑合着看。。。
0x01 shiftjmp
die查壳,发现是无壳的ELF64文件,直接拖入ida64
按tab发现无法生存伪代码,发现这里有两处错误。
这两处错误是花指令,花指令详情见花指令 - CTF Wiki (ctf-wiki.org)
第一处是无意义跳转,第二处是jmp造成的脏字节。
把jz和imp都nop掉。
undefine (U)然后按 c生存代码 按p生存函数main
非常简单的异或加密,写个python脚本解密
12345enc='SXAxS6jd8doTxBQ{x"Ma'+chr(0x27)+r"csE-|El,o/{^\\"flag=""for i in range(34): flag+=chr(ord(enc[i])^i^0)print ...