![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
反汇编
夜听细雨声
技术控
展开
-
反汇编(一)C/C++变量、常量、指针和引用在内存中的表现形式
高级语言隐藏了太多信息。这一篇用汇编来直观探究 C/C++ 变量,函数,类,继承等等再内存中是怎么表示的先来看这样一段代码,分为三个部分。先准备好三个部分准备反汇编。1.defineVar() 函数内解释 变量在内存中的表现形式2. varPtr() 函数内解释指针与引用在内存中的表现形式3.constdefine()函数内解释const与define的区别跟在内存中的表现形...原创 2019-06-27 13:35:37 · 1048 阅读 · 0 评论 -
反汇编(二)C/C++ 探究 ifelse语句跟switch的区别 以及 在有些情况下switch性能更优的原因
这篇文章讲述了if else语句,switch语句的底层原理。且比较了两者间的区别以及编译器对switch语句的优化。其实计算机并不认识if,else等语句,这不过是高级语言为了提高开发效率而生成的中间产物。那么if (XXX > YYY)在汇编的角度去看,计算机做了运算,把XXX与YYY相减(相当于 X + YYY的补码。因为计算机只会做加法),结果会影响标志寄存器(真实存在的硬...原创 2019-07-04 20:37:24 · 616 阅读 · 0 评论 -
反汇编(三)C/C++ 结构体与类(1)--this指针、类成员与类成员函数
类的内容有点多,分章节研究结构体跟类1.结构体跟类结构体跟类本质上没有太大区别,只是结构体成员默认为public的,而类则是private。这里直接省去了结构体的反汇编。直接看类。#include<iostream>using namespace std;class A{public: /* 以下数据成员探讨 一个类的大小由什么决定 以及数...原创 2019-07-24 23:28:38 · 457 阅读 · 0 评论 -
反汇编(五)C/C++ 结构体与类(3)--虚函数和纯虚函数的本质以及原理(1)
虚函数是面对对象程序设计的关键组成部分。构造函数和析构函数的识别流程稍微简单,而且,在类中定义了虚函数之后,如果没有提供默认的构造函数,编译器必须提供默认的构造函数.对象的多态性需要通过虚表和虚表指针来完成,虚表指针被定义在对象首地址的前4个字节处。因此虚函数必须作为成员函数使用,由于非成员函数没有this指针,所以无法获得虚函数指针。也没办法访问虚函数、虚函数的机制:当类中定义有虚函...原创 2019-09-19 19:11:31 · 755 阅读 · 0 评论 -
反汇编(六)C/C++ 结构体与类(4)--从内存角度再谈多态、多重继承、菱形继承
目录 1.识别类和类之间的关系1.1 虚函数1.2虚函数特性的失效2.多重继承3.抽象类(纯虚函数的实现原理在这里补充)4.菱形继承类之间的关系与现实社会非常相似。类的继承和派生是一个从抽象到具体的过程。 什么是抽象到具体的过程?以 “生物” 为例子,生物仅仅代表是一个概念。从某种程度上,它是抽象的。我们无法知道这是一个怎么样的一个东西,什么样...原创 2019-08-15 06:39:37 · 489 阅读 · 0 评论 -
反汇编(四)C/C++ 结构体与类(2)--构造函数和析构函数出现的时机
构造函数与析构函数是类的重要组成部分。构造担任数据初始化,析构担任对象销毁时释放对象中申请的资源。对象生成时会自动调用构造函数。只要找到了定义对象的地方就找到了构造函数的调用时机。但是真实情况不是这样的。这些受到对象的生命周期的影响。构造函数出现的时机不同。1.局部对象2.堆对象3.参数对象4.返回对象5.全局对象6.静态对象先来看看局部对象的构造函数出现的时机。...原创 2019-08-12 12:05:32 · 288 阅读 · 0 评论