![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C
文章平均质量分 89
是星星鸭
希望对你有所帮助。
展开
-
【汇编 C++】类的构造与析构
本文章将会可能会涉及到汇编的知识,不过没有关系,我会讲的尽量通俗易懂;另外本篇文章开始前,建议了解下什么是函数重载,这个概念很简单的--有相同的函数名,但参数列表不相同的函数,就是函数重载;和类具有相同名称,并且没有返回值类型的函数,就是类的构造函数{Test() // 和类具有相同的名、并且没有返回值{}};}类的构造函数名前加上'~'这个符号,就是类的析构函数{Test(){printf("你调用了一次类的构造函数\n");}原创 2022-10-09 21:32:52 · 1892 阅读 · 0 评论 -
【汇编 C++】C++this指针、this指针长什么样?
this指针是“C++封装后的结构体或类中成员函数”的一个默认参数,用于存放当前结构体变量(类的对象)的首地址,它是一个隐藏的参数。概念听起来很模糊,不急,代码测试之后就能明白。{int a;int b;int c;};// 结构体的外部定义函数{}int main(){// 此处下断点,观察反汇编return 0;}我们先把函数定义在结构体的外部,现在的结构体就是个简单的结构体,没有进行封装,函数也是个简单的函数,没有this指针。原创 2022-10-08 16:39:28 · 816 阅读 · 0 评论 -
【汇编 C】从汇编分析为什么传递结构体指针比传递结构体变量高效
本文章使用的工具是vs2010,本篇文章主要讲解结构体指针作为参数传递与结构体变量作为参数传递的对比,不谈值传递与址传递的概念。 先声明下观点:当有少量结构体成员时,传递结构体指针和结构体变量的差距不大;当有大量结构体成员时,随着成员越来越多,传递指针的效率也越来越高,与传递变量的差距也越来越大。原创 2022-10-08 00:08:33 · 1041 阅读 · 0 评论 -
【汇编 C】C语言常用的三种函数调用约定:__cdecl、__stdcall、__fastcall
本篇文章使用的工具是vs2010,内容可能涉及到汇编的知识,建议有一些汇编基础的再来看,不过没有汇编基础也没有关系,了解一下这三种调用约定即可。如果有听不懂的地方可以私信我,有错误的地方望指出。原创 2022-10-06 01:19:46 · 2251 阅读 · 0 评论 -
【C语言】结构体字节对齐
字节对齐是字节按照一定规则在空间上排列。现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。在我们之前写程序的时候可能会发现有的时候你定义的变量是一个字节,但是他在内存中依然按照四个字节给你存储,因为在32为系统中,4字节对齐执行效率是最快的。这就是一种牺牲内存换取性能的方案。举个栗子。原创 2022-10-04 00:09:57 · 3108 阅读 · 0 评论 -
【汇编 C】循环语句goto、while、dowhile、for
在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。一组被重复执行的语句称之为循环体,能否继续重复,决定循环的终止条件。循环结构是在一定条件下反复执行某段程序的流程结构,被反复执行的程序被称为循环体。循环语句是由循环体及循环的终止条件两部分组成的。例子:(这里就拿汇编举例吧)首先401210位置的jmp会跳到401230的位置,然后将1,2,3,4分别放到对应的寄存器中之后再一次使用jmp跳到401210的位置。原创 2022-09-28 00:13:38 · 3515 阅读 · 2 评论 -
【汇编 C】switch为什么高效率?分支语句if else与switch
本文章使用到的工具是vs2010,建议使用VC++6,操作都一样。什么是分支语句?分支语句即进行一个选择,如果出现情况A则进行相应的操作;如果出现情况B则进行相应的操作,等等。if else分支语句我们也知道if是如果的意思,那么可以根据意思理解,比如:if(love == true) // 如果love是真不是假printf("这是真爱。\n");// 那么就输出这是真爱。原创 2022-09-24 17:10:03 · 1813 阅读 · 0 评论 -
【汇编 C】i++和++i底层刨析
不过++ii输出的是+1之后的变量,而ii++输出的则是+1之前备份的临时变量。代码的逻辑很简单,简单到没有逻辑。都是先+1,然后再输出。原创 2022-09-21 22:57:02 · 921 阅读 · 0 评论 -
【汇编 C】函数嵌套底层原理堆栈图、为什么局部变量一定要赋初始值
对于堆栈图不够了解的话,可以先观看这篇文章《函数调用底层堆栈图》。此外,对于编译器最好使用VC++6。因为我当前使用的是win11操作系统,所以只能使用vs2010进行讲解。对于vs2010和VC++6对于局部变量在内存中的处理是不一样的,本篇文章以VC++6为标准。原创 2022-09-21 01:35:28 · 981 阅读 · 0 评论 -
【Linux C++】条件变量wait函数
该函数有三个动作: 1、把互斥锁解锁 2、阻塞、等待条件信号(被唤醒) 3、条件被触发+给互斥锁加锁(这两个操作是原子性的)原创 2022-09-18 16:06:00 · 3351 阅读 · 2 评论 -
【汇编 C】变量与参数的内存布局、函数的返回值以及浅谈黑客基础攻击方式
首先看本篇文章,最好了解一下程程序运行的堆栈图是什么样的?怎么去画?我的这篇文章有讲过《堆栈图》。变量就是用来存放值的一块内存,变量名就是存放数据地址的别名,这句话是一定要记住的,我们接下来讲的东西会涉及到这一点。变量分为全局变量和局部变量。通过上面的代码,我们大致可以把堆栈图进行划分一下了,如下:由堆栈图可知:ebp中存放原来ebp的值ebp+4存放的是返回地址ebp+8开始往下存放的是参数,有几个参数就占几个格子ebp-4往上蓝色的区域就是缓冲区,也就是局部变量存放的地址。原创 2022-09-17 17:43:50 · 1455 阅读 · 0 评论 -
【Linux C++】一篇文章搞懂线程同步的五种方式(锁、条件变量、信号量)
即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多。听完上面的叙述,是不是很匹配互斥类型锁的特色。原创 2022-09-16 16:36:16 · 1713 阅读 · 2 评论 -
【汇编 C】全局变量、局部变量、修改数值外挂的原理
外挂中提到的所谓基址,其实就是全局变量,变量是什么?变量就是一块地址的别名。全局变量全局可见,从被定义往下所有的地方都可以对它进行操作,局部变量只能在定义它的函数内使用,其他地方不可见。原创 2022-09-13 00:17:15 · 2513 阅读 · 0 评论 -
【汇编 C】函数调用的底层原理解析堆栈图
通过上面的逐步观察,我们可以发现,调用函数无非就是call指令进入函数,然后提升堆栈,创建缓冲区,之后将需要用到的寄存器拷贝一份,然后运算,完成后将寄存器的值还原,平衡堆栈。就是这些步骤完成了一个函数的调用。原创 2022-09-12 13:34:39 · 1474 阅读 · 0 评论 -
【Linux C++】线程安全-原子性、可见性、有序性
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。原创 2022-09-10 21:57:49 · 2264 阅读 · 6 评论 -
【汇编 C】vs2010如何调出反汇编窗口、最简单的C程序以及__ASM关键字
简单来说,编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级 语言 )”的程序。在这里我是用vs2010写C语言,所以编译器就是帮我将C语言转换成汇编。原创 2022-09-08 21:59:27 · 2159 阅读 · 0 评论 -
Win11_vs2010镜像安装方法
由于我个人使用使用的是win11系统,没办法使用vc++6,所以就有了本章的vs2010安装教程,非常简单。原创 2022-09-08 21:09:11 · 5225 阅读 · 6 评论