自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(51)
  • 收藏
  • 关注

原创 vscode 远程登录

登录不上如何检查检查虚拟机是否有shh进程,及22号端口ps -e|grep sshnetstat -ntlp|grep 22window使用shh命令连接试一试ssh you@192.168.38.165重启网卡登录参考

2022-03-21 16:49:51 1060

原创 mysql 设置

mysql 设置密码刚安装mysql时,切换到root用户,不用密码就能登录。或者用安装时,产生的随机用户密码登录/etc/mysql/mysql.conf.d/mysqld.cnf/etc/mysql/debian.cnf 修改密码修改mysql密码把密码先置为空,然后再设置密码 update user set authentication_string='' where user='root';flush privileges;ALTER USER 'root'@'localho

2022-01-15 14:22:08 327

原创 tmux 的使用

修改~/.tmux.conf# 修改主键unbind C-bset-option -g prefix C-j# 激活鼠标set-option -g -q mouse on# 修改分屏bind h split-window -hbind v split-window -vunbind '"'unbind %hotkey# Window 窗口c 新建窗口 new a window& 关闭窗口 close current windowl 切换窗口 switch t

2022-01-12 14:14:53 182

原创 智能指针

自定义智能指针#include <iostream>using namespace std;class Person {public: int m_age; Person(int age) :m_age(age) { cout << "Person(int age)" << endl; } Person(const Person& per) :m_age(per.m_age) { cout << "Person(const Perso

2021-06-27 23:18:32 93

原创 类型转换 double的存储

类型转换c语言风格(type) expressiontype (expression)c++风格static_castdynamic_castreinterpret_castconst_cast 使用: xx_cast <type>(expression)const_cast#include <iostream>using namespace std;class Person {};int main() { const

2021-06-27 15:35:15 90

原创 运算符重载

#include <iostream>using namespace std;class Point { int m_x; int m_y;public: Point(int x=0,int y=0):m_x(x),m_y(y) {} void display()const ; // &防止产生临时对象 Point& operator+=(const Point& p1); // 第一个const,返回常量 不能 (p1+p2)=p3 // 第二个

2021-06-26 18:22:02 73

原创 内部类 局部类

内部类如果将类A定义在类C的内部,那么类A就是一个内部类(嵌套类)内部类的特点支持public、protected、private访问权限成员函数可以直接访问其外部类的所有成员(反过来不行)成员函数可以直接不带类名、对象名访问外部类的static成员不会影响外部类的内存布局可以在外部类内部声明,在外部类外部定义局部类在一个函数内部定义的类,称为局部类局部类的特点作用域仅限所在函数内部其所有成员必须定义在类内部,不允许定义static成员成员函数不能直接访问函数的局部变

2021-06-24 23:11:44 61

原创 友元 友元类

#include <iostream>using namespace std;class Point { //只能是成员函数 Math::point 不行 //friend Point add(Point p1, Point p2); friend class Math; int m_x; int m_y;public: Point(int x=0,int y=0):m_x(x),m_y(y) {} void display() { cout << "("

2021-06-24 23:00:20 51

原创 编译器自动生成构造函数

c++编译器在某些特定情况下,会给类自动生成无参的构造函数成员变量在声明时进行了初始化有定义虚函数虚继承其他类包含了对象类型的成员,且这个成员有构造函数(编译器生成或自定义)父类有构造函数(编译器生成或自定义)...

2021-06-24 22:09:54 165

原创 拷贝构造函数

调用父类拷贝构造#include <iostream>using namespace std;class Person {public: int m_age; Person(int age) :m_age(age) {} Person(const Person& person) :m_age(person.m_age) {}};class Student:public Person {public: int m_score; Student(int age,i

2021-06-24 12:22:11 62

原创 数组与指针

const char *name ="youyuo" sizeof(name) = 4; //x86 strlen(name) = 6;char array[] = "youyou" sizeof(array) = 7; //x86 strlen(array) = 6;

2021-06-24 11:33:09 74

原创 const成员变量、函数

const成员被const修饰的成员变量、非静态成员函数const成员变量必须初始化(类内初始化),可以在声明的时候直接初始化赋值非static的const成员变量还可以在初始化列表中初始化const成员函数(不能是静态)const关键字放在参数列表后面,函数声明和实现都必须带const 内部不能修改非static成员变量 内部只能调用const成员函数、static成员函数 非const成员函数可以调用const成员函数const成员函数和非co

2021-06-23 14:44:47 144

原创 static成员变量、函数及其应用

静态成员被static修饰的函数或变量可以通过对象、指针、类名访问不依赖对象静态成员变量相当于全局变量设置了访问权限类内声明,类外初始化。初始化时不带static;如果类的声明和实现分离,在实现中初始化静态成员函数没有this指针。(this只能用在 非静态 成员函数 类)内部只能访问静态成员函数和变量声明和实现分离时,实现不带static构造、析构不能是静态的;虚函数不能是静态的...

2021-06-23 13:15:45 148

原创 信号 槽

connectQObject::connect(&button, &QPushButton::clicked,&app, &QApplication::quit);信号和槽的参数要一致。信号的参数可以多于槽disconnect取消连接connect(button, SIGNAL(clicked()), &a, SLOT(quit()));Qt4写法。缺点不会检查参数错误。自定义信号、槽信号信号只需要声明,不需要实现,返回值void可以发生

2021-06-22 17:09:54 82

原创 多继承 菱形继承 虚继承

菱形继承菱形继承带来的问题 最底层子类从基类中继承的成员变量冗余、重复。 最底层子类访问基类成员变量有二义性。虚继承 解决多继承属性之间的重复问题 虚函数是为了实现多态#include <iostream>using namespace std;struct Person{ int m_age; //virtual void run() = 0; void fun() { cout << "P

2021-06-22 13:14:56 70

原创 虚析构 抽象类

虚析构父类指针指向子类对象时 Base *p = new Son(), delete p 如果析构函数不是虚函数,则只会调用父类析构函数,可能会造成只释放一部分空间。 如何是虚析构,则先调用子类析构,然后调用父类析构。抽象类纯虚函数没有函数体且初始化为0的虚函数,用来定义接口规范抽象类含有纯虚函数的类,不可以实例化(不能创建对象)抽象类也可以包含非纯虚函数,成员变量如果父类是抽象类,子类没有完全重写纯虚函数,那么这个子类依然是抽象类...

2021-06-21 22:13:02 102

原创 汇编分析多态 虚函数表

多态默认情况下,父类指针指向子类对象,只能调用父类中的函数。 Animal *p = new Dog指针p只能调用Animal类中的函数#include <iostream>using namespace std;class Animal {public: void speak() { cout << "animal speak()" << endl; } void run() { cout << "animal ru

2021-06-21 17:02:35 182

原创 正则表达式 (regular expression)

元字符(metacharacter). 单个字符,换行符除外。字符* 匹配前面的子表达式任意次数,包括0次。次数+ 匹配前面的子表达式一次或多次。? 匹配前面的子表达式0次货一次。{} 匹配前面的子表达式指定的次数。贪婪模式和非贪婪模式&...

2021-06-21 14:02:29 156

原创 字符集 字符编码 utf-8签名 chcp

字符集(character set) 字符的集合。字符集种类较多,每个字符集包含的字符个数不同。 常见字符集:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集。字符编码(character encoding) 把字符集中的字符,编码为指定集合中的某一对象,以便文本在计算机中存储和通过通信网络进行传递。 Unicode字符集:可以编码为UTF-8、UTF-16、UTF-32。 GB2312字符集:可.

2021-06-20 20:11:24 308

原创 汇编分析 构造函数相互调用

在{}中调用class Person {public: int m_age; int m_id; Person() { //创建了一个临时对象 Person(10, 20); } Person(int age,int id) { this->m_age = age; this->m_id = id; }}; Person(10, 20);0084206D push 14h 0084206F push 0Ah //.

2021-06-19 17:25:41 117

原创 初始化列表

初始化列表初始化顺序只跟成员声明顺序有关初始化列表与函数默认参数配合使用函数声明与实现分离是 初始化列表只能放在函数实现中 默认参数只能放在函数声明中

2021-06-19 16:34:08 66

原创 构造函数 析构函数 内存布局

构造函数与析构函数构造函数:初始化对象内存空间析构函数:释放堆空间必须public才能访问

2021-06-19 12:46:28 149

原创 误将函数声明当做定义对象

函数声明的坑#include <iostream>using namespace std;#include <cstdlib>class Person {public: int m_age; Person() { cout << "Persson" << endl; } Person(int a):m_age(a) { cout << "Preson(int a) -> " << m_age <&

2021-06-19 10:48:45 51

原创 malloc new 时 堆空间初始化;是否调用构造函数

malloc free//void *malloc(size_t size) //类型 大小char *p = (char *)malloc(4);free(p)new delete// new + 类型int *p = new int;delete p;new[] delete[]//分配数组加[]char *p = new char[4];delete[] p;new初始化int *p1 = new int; //未.

2021-06-18 16:37:34 521

原创 通过对象、指针调用函数时this指针的情况

#include <iostream>using namespace std;class Person {public: int m_id; int m_age; int m_height; void display() { //mov eax,dword ptr[this] //[eax] cout << "m_id :" << m_id //[eax+4] << "\nm_age:" << m_age //[e

2021-06-18 15:34:24 152

原创 this指针将对象的属性和方法关联起来(汇编分析this)

类c++中可以用struct、class定义一个类 struct默认权限是public&nbspl;class默认权限是private对象模型属性存放在对象中;方法存放在代码区this指针函数在代码区,属性在对象中(栈、堆)。函数中有this指针,这样就能完成访问。 this指针就是函数的隐式参数,存储函数调用者的地址。...

2021-06-18 12:24:02 116

原创 汇编分析函数调用时栈空间情况

栈栈:往低地址方向生长esp:栈顶指针。通过push、pop操作 push 4:压栈,减 pop eax:出栈,加 call 地址:将下一条指令地址压栈函数调用 test(1, 3);//将函数参数压入栈空间00D21868 push 3 00D2186A push 1 //调用 __empty_global_delete,后jmp到test函数代码,同时将下条指令的地址压栈00D2186C call

2021-06-17 23:17:51 242

原创 a++ 与 ++a

a++先用a,让然a在自增 int a = 10;007A1006 mov dword ptr [ebp-4],0Ah int b = a++ + 2;// b[ebp-8] = a+2 = 12007A100D mov eax,dword ptr [ebp-4] 007A1010 add eax,2 007A1013 mov dword ptr [ebp-8],eax //a[ebp-4] = a+1

2021-06-17 16:52:20 56

原创 if-else switch效率

if-else依次不断比较;switch直接计算相对地址,条件较少时与if-else差不多int main(){ 00F31070 push ebp 00F31071 mov ebp,esp 00F31073 sub esp,0Ch int no = 4;00F31076 mov dword ptr [no],4 switch (no) {00F3107D mov eax,dword.

2021-06-17 16:14:28 54

原创 mov 及常见指令;汇编分析指针、引用、is-else

movmov dest,src 将src的内容赋值给dest[] 中括号内放的为内存地址word(2字节)、dword(4字节)、qword(8字节quad word)a的地址:008FF918h[ebp-8]:8F F920h-8h = a的地址ptr为固定写法Q&A Q:为什么不直接用a的地址 A:这种寻址方式更灵活,程序每次加载到内存的地址不是固定的。变量的地址CPU大部分是小端模式。高存高,低存低(高地址存高字节,低地

2021-06-16 16:22:46 567

原创 汇编语言 0x64

汇编语言种类8086汇编(16bit)x86汇编(32bit)x64汇编(64bit)ARM汇编x64汇编,根据编译器的不同有两种书写格式IntelAT&T项目AT&TIntel说明寄存器名%eaxeaxIntel不带%操作数顺序movl %eax,%edxmov edx,eax将eax的值赋值给edx立即数movl $3,%eax movl $0x10,%eaxmov eax,3 mov eax,0x10

2021-06-15 23:57:56 1384

原创 引用(reference)

引用注意引用就是变量的别名引用必须初始化,一旦指向了某个变量,就不可以改变指向#include <iostream>using namespace std;int main(){ int age = 10; int height = 110; int& refAge = age; refAge = 11; cout << age << endl;//注意区分,这里不是改变指向 refAge = height; refAg

2021-06-15 22:18:49 200

原创 const

const与指针指针int age =1;int *P =&age;/*指针: 指针的地址&p 指针指向的内容*p、age变量: 变量的地址&age,p 变量:age,*p*/const修饰右边的东西int age =10;//p1、p2(指针)不是常量;*p4、*p5(指针指向的内容)是常量cosnt int *P1 = &age;int const*P2 = &age;//p3(指针)是常量;*p3(指针指向的内容)不是

2021-06-15 21:22:33 65

原创 内联函数(inline function) ;宏函数

内联函数使用inline修饰函数声明和实现,可以使其变成内联函数建议:声明和实现都加上inline特点编译器直接将函数调用展开为函数代码。可以减小函数调用的开销(堆栈)会增加代码体积注意尽量不要inline超过10行的代码函数有些函数即使声明为inline,也不会编译为内联,比如递归函数。内联函数与宏相同内联函数和宏都可以减小函数调用的开销不同内联函数多了语法检测和函数的特性#include <iostream>usi

2021-06-15 20:35:03 102

原创 extern “C“

extern “c”被extern "c"修饰的代码会按照c语言的方式编译如果函数同时有声明和实现,要让函数声明被 extern "C"修饰,函数实现可以不被修饰extern "C" void fun() { cout << "fun()" << endl;}extern "C" void fun(int c) { cout << "fun(int c)" << endl;}//另一种写法extern "C" { void fun()

2021-06-15 18:07:59 204

原创 函数重载(overload) 默认参数

函数重载规则函数名相同参数个数、类型、顺序不同注意返回值类型与函数重载无关调用函数时,实参的隐式类型转换可能会产生二义性。本质采用了name mangling 或者叫name decoration的技术c++编译器会对符号名(函数名)进行改变、修饰不同编译器(MSVC,g++)有不同的生成规则通过ida打开 [vs_release_禁止优化]可以看到默认参数规则默认参数只能按照从右到左的顺序函数同时有声明和实现,默认参数只能放到函数声明中默认参数的值可以是常量

2021-06-15 15:22:23 172

原创 nat 桥接 仅主机

VMnet0:桥接模式。虚拟机与物理主机在同一网络段,通过物理网卡与虚拟机通信。虚拟机能上外网。VMnet1:仅主机。虚拟机与物理主机在不同网段,通过虚拟网卡(以太网适配器 VMware Network Adapter VMnet1)与虚拟机通信。虚拟机不能上外网。VMnet8:nat。虚拟机与物理主机在不同网段,通过虚拟网卡(以太网适配器 VMware Network Adapter VMnet8)与虚拟机通信。虚拟机能上外网。疑惑:为什么要经过VMnet0虚拟网卡(也就是主机网卡)?参考 .

2021-06-08 15:27:27 181

原创 线程

线程概念进程:有独立的进程地址空间,有独立的PCB。 分配资源的最小单位。线程:没有独立的进程地址空间,有独立的PCB。 最小执行单位。ps -Lf 进程ID ---->线程号LWP。CPU最小执行的单位。线程共享:...

2021-05-06 19:34:23 67

原创 守护进程

守护进程daemon进程,通常运行在操作系统后台,脱离控制终端,一般不与用户直接交互,周期性等待某个事件发生或执行某一动作。不受用户登录注销影响。通常采用一d结尾的命名方式。守护进程创建步骤fork子进程,让父进程终止。子进程调用 setsid() 创建新的会话。根据需要,改变工作目录位置 chdir()。根据需要,重设umask。根据需要,关闭、重定向文件描述符。守护进程业务逻辑。...

2021-05-05 11:30:25 54

原创 信号

信号相关概念产生信号硬件异常产生除以0 ----> 8)SIGFPE(浮点数列外) float非法访问内存 ----> 11)SIGSEGV(段错误)总线错误 ----> 7)SIGBUS按键产生Ctrl + c ----> 2)SIGINT (终止,中断) interruptCtrl + z ----> 20)SIGTSTP(暂停,停止) terminalC

2021-05-05 09:49:16 77

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除