自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C/C++学习方法路线

小伙伴们,大家好。关于C和C++的学习路线,我看了很多过于这方面的回答, 感觉大多都太学术化。但我最推荐的还是学完基础后,直接做项目,去找一些关于项目的教程。最典型的就是由推荐学C++看C++primer,这对于一个初学者来说太难了,根本看不进去。这种书都有一个特点,很精炼,全面。初学者根本看不出所以然来。等有一定基础后,再看这种书会有全新的感受。 还有让linux新手看apue的,你这是在要萌新的命吗?我的建议:从实战入手,比如想做通信后端开发,就自己搭建一个最简单的通信后端。从最开始的只有100

2021-12-09 16:08:25 353

原创 c语言static静态变量

1. static的全局变量在函数定义外,作用范围被限制在所定义的文件中不同文件静态全局变量可以重名,但作用域不重名(意思就是同名的static全局变量可以在同一个项目的不同文件出现)static全局变量的声明周期等同于程序运行周期2. static的局部变量生命周期:等同与程序的运行周期(与全局变量的生命周期相同,这一行代码从未在函数里面执行,它在程序最开始就已经执行了)作用域:从变量定义到函数结束,若未赋初值,则默认为0(只初始化一次)3. static的函数c语言函数默认是全

2021-11-03 21:46:43 1852

原创 c语言基础局部变量与全局变量

局部变量1. 在函数内部定义的变量2. 生命周期:从变量定义到函数结束3. 作用域:从变量定义到函数结束全局变量1. 在函数外部定义的变量2. 生命周期:从程序创建到程序销毁(全局变量的地址一旦文件编译完毕就已经确定, 不管最终执行多少次都不会改变,逆向中常用的基址主要就是全局变量)3. 作用域:整个项目,其他文件要使用则需要声明局部变量和全局变量为什么会有这样的特点理解c语言所有的语法问题都要从内存的角度考虑,局部变量和全局变量也要从这个地方理解我在另一个文件里面有介绍:

2021-11-03 21:46:28 346

原创 linux内存模型

局部变量在栈区全局变量,静态局部变量,静态全局变量在数据区全局初始化数据区/静态数据区(data段)该区域包括了程序中明确被初始化的全局变量,已经初始化的静态变量(包括全局静态变量和局部静态变量)和常量数据(字符串常量)未初始化数据区(bss段)存入的是全局未初始化变量和未初始化静态变量。未初始化数据区的数据在程序开始执行前被内核初始化为0或者NULL程序在加载到内存前,代码区和全局区(data和bss)的大小就已经固定。程序运行期间不能改变...

2021-11-03 21:41:15 379

原创 linux静态库与动态库

linux中静态库的制作和命名规则命名规则:libtest.a 就是lib****.a,只有*****是我们想要的库的名称,也就只有****是可以让我们发挥的。制作步骤: 源代码.c,.cpp

2020-06-22 18:15:06 179

原创 gcc(g++)的详细教程

gcc的工作流程gcc的工作流程可以简单分为以下4步预处理 --E(1) 宏替换(2) 头文件展开(3) 注释去掉xxx.c -> xxx.i此时,xxx.i文件依然是c文件,其实内容并没有什么大的变化命令为 gcc -E hello.c hello.igcc默认的编译工具 cpp编译 --S生成汇编文件,此时xxx.s 为汇编代码的文件xxx.i -> xxx.s命令为gcc -S hello.i -o hello.sgcc默认工具为gcc汇编 --c

2020-06-20 09:44:12 2733

原创 vim极为的详细教程(四)vim的工作环境

先看一,二,三,再看四会比较好与时俱进的vimvim作为一个老古董,其实一直在改进之中。常见的有(1) vscode作为一个包容万象的容器,严格说不是vim的正统,但它的确大大降低了vim的学习成本,而且自带功能强大的插件,我推荐vim学到一定程度,就可以去用vscode了,vscode的编译部分就可以了,调试配置部分,比如gdb,json我也会出一个教程的。(2) neovim vim的正统升级版,不推荐,虽然功能是比vim强了,但还是比不上vscode。(3) tmux, linux下的分

2020-06-17 23:55:28 525

原创 vim极为详细的教程(三)插件的使用

插件的安装使用简介:我还是比较推荐用集成度更高的vscode,vscode中已经自带,而且自动启动了很多必要的插件,比如自动补全,括号成对,目录搜索等,这些必要的插件我这里就不详细讲了。4-1 vim插件的安装方法vim的强大功能大部分来源于vim多样的插件,vscode同样支持vim的插件,现在只需使用插件管理器就可以方便快捷的安装插件了。市面上常见的插件管理器有vim-plug,vundle,pathogen,dein.vim,volt等,这之中,vim-plug占的市场份额是最大的,综合性能也

2020-06-17 23:34:09 592

原创 vim极为详细的教程(二)vim自带的高级操作和映射

vim自带的高级操作2-1 vim的多文件操作(1)buffer, tab ,window的概念buffer:是指打开的一个文件的内存缓冲区window: 窗口是buffer的可视化的分割区域tab:多个window组成的一个工作区window,tab,buffer的关系如图所示,所有的window共同组成一个bufferbuffer的本质:vim打开一个文件后,会将文件内容加载到缓冲区中,之后的修改都是针对内存中的缓冲区,并不会直接保存到文件中。当我们在命令行输入w的时候,才会将缓冲区中

2020-06-17 10:27:49 869

原创 vim极为详细的教程(一)基本操作

vim的总体介绍我以前是坚定的vim党,但后来用了一次vscode,便再也出不来了。vscode虽然功能强大,但本质上任然是个编译器,它强大的功能来自于对各种经典工具的灵活调用,vscode开发C++本质还是对其他编辑工具的调用,而vim又可以说是这些编辑器中功能最强大,效率最高的,我的vscode也用的是vim模式。要熟练利用vscode开发C++, 推荐熟练掌握vim,必须熟练掌握gdb,json等。vim常常因其极高的学习门槛劝退很多新手,但这很大程度上是因为市面上缺乏好的vim使用教程,其实只要

2020-06-15 13:05:57 6424

原创 windows API(9)线程安全 临界区

线程安全问题每一个线程都有自己的栈区,而局部变量是存储在栈中的,这就意味着每个线程都有一份自己的局部变量,如果线程仅仅使用“局部变量”则不存在线程安全问题。但是,如果使用全局变量就会存在线程安全问题。解决方法-临界区我们将全局变量称为临界资源,就是一次只允许一个线程进行使用。访问临界资源的代码就称为临界区。原理:我们对临界资源增加令牌,只有当令牌为1时代码才可以对临界区进行访问,同时将令牌置0。其它线程便无法访问该临界资源临界区实现之线程锁:创建全局变量 CRITICAL_SECTION

2020-06-11 09:15:57 500

原创 windows API(7)创建线程

什么是线程:线程是附属在进程上的执行实体,是代码的执行流程一个进程可以包含多个线程,但一个进程至少要包含一个线程,在C++程序中,main()函数即为主线程。创建线程HANDLE CreateThread{ //安全描述符 LPSEECURITY_ATTRIBUTES lpThreadAttributes, //初始堆栈的大小 SIZE_T dwStackSize, //调用的线程函数 LPTHREAD_STA

2020-06-10 09:47:00 984

原创 windows API(8)线程控制

线程控制如何让线程停下来线程让自己停下来,Sleep函数线程让别的线程停下来,SuspendThread函数线程让别的线程恢复,ResumeThread()函数注意,线程是可以挂起多次的,必须调用同样次数的恢复线程函数才可以让线程恢复等待线程结束WaitForSingleObject()函数,等待上一个线程执行结束后,再接着执行int main(){ HANDLE hThread = CreateThread(NULL, 0, ThreadProc, NULL, NULL,

2020-06-10 09:46:52 255

原创 windows API(6)GDI总结

windows的4种图形对象画笔(Pen):影响线条,包括颜色,粗细,虚实,箭头形状等画刷(Brush):影响区域,如使用的颜色,是否有阴影等字体(Fonts):影响文字输出的字体位图(Bitmaps):影响位图的创建,位图操作,位图保存等使用GDI画图的步骤画在哪里:设备对象就是表明在哪个窗口hwnd =(HWND)NULL,将hwnd设置为空即可在桌面上画获取设备对象上下文,每个设备都有缓存区,我们必须先画在缓存区中。hdc = GetDC(hwnd)设置图形对象HGDIOB

2020-06-09 10:12:39 234

原创 windows api(5)窗口的本质

进程的内核模块分析模块就是进程的组成元素,比如一个可执行程序的每一个dll,每一个.exe文件都是一个模块。windows进程内核空间中最重要的就是以下两个个模块:ntoskrnl.exe,win32k.sys模块。在应用程序开始执行时,会将kernel.dll,user32.dll,gdi.dll加载到进程用户空间。用户创建进程,本质上只是调用kernel32.dll给提供的对ntoskrnl.exe的接口。窗口是画出来的,我们使用user32.dll和gdi32.dll提供的接口来间接调用w

2020-06-08 10:33:14 323

原创 windwos API的进程创建(3)

CreateProcess函数的深入讲解内核对象增加引用计数内核对象增加引用计数,除了可以使用另一个进程或线程打开该内核对象,还可以通过继承的方式增加引用计数。子进程可能继承父进程的句柄表,并且维持父进程包含的内核对象的句柄值。具体的继承细节由CreateProcess函数实现CreateProcess函数参数详解第一个参数为可执行文件的路径,字面意义第二个参数为可执行文件的命令行参数,字面意义,不同的可执行文件会进行说明的(重点)第三个参数为LPSECURITY_ATTRIBUTES

2020-06-07 09:43:02 225

原创 windows API进程创建(4)

windows 创建进程时的相关基础API进程句柄与进程ID的区别句柄是每一个进程内核对象所存储的句柄表的索引值,为进程内核对象私有,同样的内核对象对于不同的进程内核对象句柄值不同。进程ID(pid,本质上就是全局句柄表的索引值),全局句柄表包含了所有正在运行的进程和线程。句柄只在某个进程内部有效,进程ID是全局的,对所有进程有效对于PROCESS_INFORMATION结构体typedef struct _PROCESS_INFORMATION { HANDLE hProcess;

2020-06-07 09:42:54 657

原创 windows API的进程创建(2)

句柄表的详细说明什么内核对像像进程,线程,文件,互斥体,事件等在内核都有一个对应的结构体,这些结构体由内核负责管理。我们称这样的对象为内核对象。如何管理内核对象该案例中一个进程可以对应4个内核对象,创建一个文件,线程等,内核中的内核对象才是核心,它控制了几乎所有的信息,用户层的不过是一个接口而已。但是,在创建完那些内核对象后,用户层需要使用这些内核对象。最简单的办法就是在使用这些内核对象时返回这些内核对象的结构体地址,但是为了安全考虑,操作系统禁止用户直接访问内核区(比如用户修改的内核对象的

2020-06-05 10:14:44 358

原创 windows API进程创建(1)

什么是进程进程就好比一个仓库,仅仅提供程序所需的资源,比如代码,数据等,是一种空间上的概念进程空间的概念对于32位windows程序,每个进程都有4G的虚拟内存空间(这是计算机历史最成功的抽象技术之一,将本来复杂的物理内存地址和虚拟内存(这个虚拟内存指的是将磁盘临时当做内存所产生的空间)地址映射为简单的4G地址空间)对于每个进程的4G空间,可大致分为4个区域空指针赋值区 0x00000000 ——0x0000FFFF 64K的空闲空间,没有物理内存与之对应,所以通过空指针进行读写会出现异

2020-06-04 19:03:03 1066

原创 linux/unix系统编程1(第二章)

linux/unix基本概念1. 操作系统的内核在广义情况下:内核是指完整的软件包,包括计算机核心层软件,以及所有的附带 标准工具:如命令解释器,图形用户界面,文件操作工具和文本编辑器等。在侠义情况下:内核就是指管理计算机资源(CPU,RAM和设备)的核心层软件。本书中的内核为狭义的内核内核的职责进程调度:linux为抢占式多任务操作系统,多任务指同时可以有多个进程驻留于内存之中,...

2020-01-07 23:49:15 410

原创 extern 和static的深入分析

static和extern功能简介在进行大型项目时,大部分的全局变量都有static或extern这两个关键字修饰,extern可以声明变量,使同一个变量可以在不同的文件中重复利用,static修饰全局变量可以屏蔽其他文件对该文件中变量的访问,防止变量名称重复extern的功能详细说明extern “C” void func(int a),被extern “C” 开头修饰的函数会以C的规则...

2020-01-04 16:14:20 343

空空如也

空空如也

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

TA关注的人

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