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 ...
nbctf
0x01 py逆向给了一个main.py和out.txt 的文件,打开分析一下
12345678910111213141516171819202122232425import random key1 = random.choices(range(256), k=20) #0到255里取20个随机数key2 = list(range(256)) #0到255的列表random.shuffle(key2) #随机排列flag = open('flag.txt', 'rb').read() #读取flag,设置成input def enc(n): #加密函数 q = key2[n] w = key1[q % 20] n ^= q return n, w x = 0x00000000for i, c in enumerate(flag): #枚举遍历,第一个是下标,第二个是里面的东西 x <<= 8 #x左移动8位,一个字节 n, w = enc(c) #根据密钥和flag出两个数 i ...
CPP类的基础
构造函数和析构函数函数名和类名相同,有参数,构造函数创建对象时会自动调用且只调用一次,而析构函数在对象销毁前会自动调用一次,这两个函数是必需的,如果不手动设置,编译器会自动设置
1234567891011//构造函数class Person{ public: Person(){ std::cout<<"OK"; } //析构函数 ~Person(){ std::cout<<"OK"; }};
构造函数的分类默认无参构造函数,有参构造函数,拷贝构造函数
调用方法有括号法显示法和隐式转化法
1234567891011121314151617181920212223242526272829303132333435class Person{ public: Person(){ //无参 } Person(int a){ //有参 } Person(const Person &am ...
无题
抽象数据类型(ADT),定义Circle 的例子
ADT Circle{
数据对象:D={r,x,y|r,x,y 均为实数}
数据关系:R={|r是半径, 是圆心坐标}
基本操作:
Circle(&C,r,x,y)
初始条件:圆C不存在
操作结果:构造一个圆C
double Area(C)
初始条件:圆已存在
操作结果:计算面积
double Circumference(C)
初始条件:圆已存在
操作结果:计算周长
……
}ADT Circle