zoukankan      html  css  js  c++  java
  • 十二天深入理解计算机系统(三)

    程序的机器级表示

    最近因为在忙我们数据仓库的开源工作,要是一个C++系统开源,工作量实在是大,说起来都是泪(累)。以及生活中的一些事,找房子什么的,学习东西的时间比较少,这个系列很长时间没有更新,争取年前搞完,废话少说,直接介绍知识点。

    1 如何产生汇编代码

    gcc -O1 -S code.c

    objdump -d code.o

    objdump -d code

    2 数据格式

    Intel用“字”表示16位数据类型,32位数为“双字”,64位数为“四字”

    3 IA32位寄存器

    wps_clip_image-19481wps_clip_image-7229

    4 数据传送指令的限制

    两个操作数不能都指向存储器位置

    5 直接跳转与间接跳转的区别

    如:jmp .L1

    .L1:

    popl %edx

    这就就是直接跳转

    jmp *%eax

    用寄存器%eax中的值作为跳转的目标。条件跳转只能是直接跳转

    6 if和switch的区别

    Switch通过跳转表来实现,跳转表的优点是执行开关语句的时间与开关情况的数量无关。跳转表更加高效。If通过条件跳转实现。

    7 栈帧结构

    wps_clip_image-10663

    8 指针差

    结构值是除以数据类型大小后的值

    9 最小化缓存区溢出攻击方法

    随机化、栈保护和限制那部分存储器存储可执行代码

    10 IA32和x86-64通用寄存器对比

    wps_clip_image-11862

    wps_clip_image-26167

    11 x86-64特性

    1)指针和长整数是64位长

    2)通用目的寄存器从8个扩展到16个

    3)许多程序状态都保存在寄存器中,而不是在栈上。整形和指针过程参数(最多6个)通过寄存器传递。

    4)对栈位置的引用相当于栈指针。大多数函数在调用开始时分配所需要的整个栈存储,在过程开始时通过减小栈指针,并在调用过程中保持栈指针指向固定位置。

  • 相关阅读:
    object引入出现滚动条问题
    java
    读大道至简有感
    读大道至简第二章有感
    加和程序的流程图及代码
    Unity编程标准导引Unity中的基本概念2.1界面概览
    Unity编程标准导引2.2Unity中的基本概念
    Unity编程标准导引3.1 Component 组件脚本及其基本生命周期
    Unity编程标准导引3.2 MonoBehavior 组件父类重构
    Unity编程标准导引1.1下载和安装Unity
  • 原文地址:https://www.cnblogs.com/jacksu-tencent/p/3472297.html
Copyright © 2011-2022 走看看