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进行缓冲区溢出攻击,造成远程守护进程溢出并执行代码

相关推荐
Light604 小时前
智链未来:彭山物流园区从物理基建到数据智能体的全维度构建方案
人工智能·系统架构·数字孪生·智慧物流·实施路径·彭山项目
学历真的很重要6 小时前
【系统架构师】第二章 操作系统知识 - 第二部分:进程与线程(补充版)
学习·职场和发展·系统架构·系统架构师
C澒7 小时前
Vue 项目渐进式迁移 React:组件库接入与跨框架协同技术方案
前端·vue.js·react.js·架构·系统架构
roman_日积跬步-终至千里10 小时前
【系统架构设计师-综合知识】系统知识点说明
系统架构
子春一13 小时前
Flutter for OpenHarmony:形状拼图:基于路径几何与空间吸附的交互式拼图系统架构解析
flutter·系统架构
枫叶丹413 小时前
【Qt开发】Qt界面优化(一)-> Qt样式表(QSS) 背景介绍
开发语言·前端·qt·系统架构
Coder个人博客19 小时前
Linux6.19-ARM64 mm mmu子模块深入分析
大数据·linux·车载系统·系统架构·系统安全·鸿蒙系统
不凉帅21 小时前
NO.7系统架构设计和软件质量
系统架构
C澒1 天前
前端整洁架构(Clean Architecture)实战解析:从理论到 Todo 项目落地
前端·架构·系统架构·前端框架
C澒1 天前
前端分层架构实战:DDD 与 Clean Architecture 在大型业务系统中的落地路径与项目实践
前端·架构·系统架构·前端框架