CSAPP-程序的机器级表示

文章目录

概念扫盲

1.汇编代码使用文本格式,相较于汇编的二进制可读性更好

2.程序内存包括:可执行的机器代码、操作系统需要的信息、管理过程调用和返回的运行时栈、用户分配的内存块

3.链接器为函数调用找到匹配的可执行代码的位置

4.x86-64中传送指令不能都指向内存位置

5.x86-64中任何寄存器生成的32位值的指令都会把该寄存器的高位设置为0

6.cltq指令将%eax符号扩展到%rax的所有位中

7.乘法指令的参数一个由源操作数给出,一个放在%rdx中。结果存放在%rdx和%rax中

8.有符号除法指令idivl将寄存器%rdx(高64)和%rax(低64)中的128位作为被除数,除数作为指令的操作数给出。商存储在寄存器%rax中,余数存储在%rdx中

9.SIMD(单指令多数据),允许多个操作以并行模式执行

10.指针NULL表示指针没有指向任何地方

11.蠕虫可以自己运行并且将等效副本传播,病毒是添加到操作系统在内的程序中,不能独立运行

12.安全单一化指许多系统容易受到同一种病毒的攻击

13.ASLR(地址空间布局随机化-Address-Space Layout Randomization)每次程序运行时各部分加载到不同区域,可以被穷举攻击(nop sled)

14.canary值,来自金丝雀在矿洞中察觉有毒气体。用于检测栈是否被破坏,即哨兵值

15.所有XMM寄存器都是调用者保存,被调用可以随意覆盖这些寄存器

16.函数参数指针和整数通过寄存器传递,浮点值通过XMM寄存器传递。参数到寄存器的映射取决于类型和排列顺序

思想理解

1.C预处理器扩展源码(include指定文件,扩展define声明的宏),编译器产生汇编,汇编产生目标文件(所有指令的二进制表示,无全局地址),连接器将代码与实现库函数合产生可执行文件

2.反汇编器只是基于机器代码文件中的字节序列来确定汇编代码,不需要访问源代码或者汇编代码

3.x86-64中内存引用总是以四字长的寄存器给出,哪怕只是一字节

4.当switch语句情况数量比较多且范围跨度较小时使用跳转表

5.栈调用通过寄存器最多传递6个整数值,更多参数可以由调用者在自身栈帧存储

6.PC相对寻址是相对本身地址的后面一条指令进行的

7.一个联合的总大小等于它最大字段的大小,将互斥的字段声明为联合可以减少空间的使用

8.奇偶校标志位断最近一次算数逻辑运算产生值的最低位字节是否有偶数个一。在浮点数比较时可以判断是否有操作数是NaN

经典好图

x86规则:生成1字节和2字节的指令保持剩下字节不变,4字节将高位4个字节置0

复杂寻址模式对于数组、结构元素相当有用

不同的数据传送指令的转换关系

set指令集合,jump类似

当前正在执行过程的栈总是在栈顶,返回地址是调用者管理

指针作为参数占8个字节

数组的指针运算

管理变长栈帧,x86-64使用%rbp作为栈指针

浮点体系简介

安全事件

1.1988年著名蠕虫病毒:对finger守护进程fingerd进行缓冲区溢出攻击,造成远程守护进程溢出并执行代码

相关推荐
跨境数据猎手22 分钟前
复刻Cssbuy跨境淘宝代购集运系统搭建方案
爬虫·架构·系统架构
@insist1233 小时前
系统架构设计师-特定领域软件架构与软件产品线
架构·系统架构·软考·系统架构设计师·软件水平考试
lqqjuly6 小时前
多智能体系统架构(Multi-Agent System Architecture)
系统架构·agent
@insist1237 小时前
系统架构设计师-构件化开发与中间件技术:架构设计落地的核心路径
中间件·系统架构·软考·系统架构设计师·软件水平考试
biwenyunnet8 小时前
【99做小程序只认餐宝盈】连锁餐饮小程序怎么做:从系统架构、技术选型到表结构与接口设计的完整实践
小程序·系统架构
雯宝9 小时前
|____2.4 FreeRTOS 深度解析--阻塞延时
系统架构
慧一居士9 小时前
论领域驱动DDD项目中 应用层 和 领域模型层 区别对比
系统架构
@卓越俊逸_角立杰出@10 小时前
深度拆解跨境支付系统架构:从资金流、账本系统到全球清算网络设计
网络·系统架构
@insist1231 天前
系统架构设计师-软件质量属性战术与架构评估方法全解
架构·系统架构·软考·系统架构设计师·软件水平考试
@insist1231 天前
系统架构设计师-五大经典软件架构风格详解与软考真题应用指南
架构·系统架构·软考·系统架构设计师·软件水平考试