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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/442214.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot宠物领养系统的设计与实现(代码+数据库+文档)

** 🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅** 一、研究背景…

运维:记一次寻找定时任务并删除的经历

前言 我相信接手别人的服务器、或者在没有任何文档的情况去看自己原先的服务器,都或多或少会遇到莫名其妙的服务器独有规则。 比如你服务本身跑的好好的,突然啪的一下,没了! 什么原因导致的呢?其中,很大可能是定时任务在作祟。 原因分析 本次,我遇到的问题是:在Ubuntu系…

基于GitBucket的Hook构建ES检索PDF等文档全栈方案

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo,预期建设方案是使用触发器类型从公共的文档源拉取最新的文件,然后调用Java将文件转Base64后入ES建索引,再提供封装接口给前端做查询之用。 由于全部内容过长&#xff…

Linux学习:权限

目录 1. shell命令的工作原理与存在意义1.1 shell命令解释器存在的意义1.2 shell解释器的工作原理 2. Linux操作系统:用户2.1 什么是用户2.2 用户的切换操作2.3 用户权限划分的意义 3. Linux中权限的种类和意义3.1 什么是权限3.2 sudo指令与短暂提权 4. 文件类型与文…

伊理威科技:新手开抖店的教程

在数字浪潮中,抖音小店如星火燎原,吸引无数创业者。你是否也心潮澎湃,想要一试身手?别急,让我们一步步揭开开店的神秘面纱。 注册流程。想象一下,你只需在抖音平台上点击“我要开店”,按提示填写相关信息&…

前端javascript的DOM对象操作技巧,全场景解析

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 所属的专栏:前端泛海 景天的主页:景天科技苑 文章目录 1.js的DOM介绍2.节点元素层级关系3.通过js修改,清空节点…

Springboot+vue的养老院管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的养老院管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的养老院管理系统,采用M(model)V&…

四元数(Quaternion)的一些性质

四元数(Quaternion)是用于三维旋转和定向的四部分组成的超复数,超复数简单理解就是比abi这样的复数更复杂的复数,其中abi这样的复数我们也可以叫做二元数,表示复平面的一点,对于熟悉欧拉公式的朋友就知道,也可以看成是…

2024届 C++ 刷题 笔试强训 Day 01

选择题 01 以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A 是无限循环 B 循环次数不定 C 4次 D 3次 解题思路&#xff1a; 我们直接来看本道题中最关键的部分&#xff1a;(y 123) && (x < 4)。 (y…

OpenTenBase 开发环境搭建及Debug设置

最近有个 OpenTenBase开源核心贡献挑战赛 领导建议大家都去试试&#xff0c;我也去凑了下热闹&#xff0c;发现能力有限一时半会是搞不明白了&#xff0c;最多也就是能搞搞文档翻译&#xff0c;或者写点操作手册啥的。 不过不管怎么样&#xff0c;先把开发环境搭上&#xff0c;…

STM32day3

1.思维导图 1.总结任务的调度算法&#xff0c;把实现代码再写一下 /* Definitions for myTask02 */ osThreadId_t myTask02Handle; uint32_t myTask02Buffer[ 64 ]; osStaticThreadDef_t myTask02ControlBlock; const osThreadAttr_t myTask02_attributes {.name "myTa…

严刑拷打_微服务

文章详情 &#xff1a;&#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a; 微服务相关知识 ⏱️ 创作时间&#xff1a;2024年03月8日 ———————————————— 文章目…

webpack5:基本概念整理

写在前头&#xff1a;这篇文章只是我个人在学习过程中对webpack文档的简单总结&#xff0c;更多详细信息请在官网阅读。 一、webpack是什么 webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。当 webpack 处理应用程序时&#xff0c;它会在内部从一个或多个入口…

掌握MySQL,看完这篇文章就够了!

1. MySQL MySQL是一种广泛使用的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;由瑞典的MySQL AB公司开发&#xff0c;目前属于甲骨文公司&#xff08;Oracle Corporation&#xff09;。 MySQL使用结构化查询语言&#xff08;SQL&#xff09;进行数据库管理…

C语言指针——常量字符串和 变量字符串

常量字符串和 变量字符串 常量字符串和变量字符串是在编程中常见的两种字符串类型&#xff0c;它们有以下区别&#xff1a; 值的不可变性&#xff1a;常量字符串的值是不可变的&#xff0c;一旦被定义&#xff0c;就不能修改。而变量字符串的值是可变的&#xff0c;可以随时修…

Redis进阶(三):主从复制

为了解决单点问题&#xff0c;实现多服务器部署redis&#xff0c;有几种解决方案可以实现&#xff1a;主从复制&#xff0c;主从哨兵还有集群。 何为主从复制 简单来说有三个服务器分别部署了redis-server程序&#xff0c;选中一个服务器当作主节点&#xff0c;其他的就是从节…

【PCL】(二十六)自定义条件的欧几里得聚类分割点云

&#xff08;二十六&#xff09;自定义条件的欧几里得聚类分割点云 以下代码实现自定义条件对点进行欧几里得聚类分割。 conditional_euclidean_clustering.cpp #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/console/time.h>#…

Android Studio编译及调试知识

文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息&#xff0c;类似这种工具的使用Android apk 从你的代码到APK打包的过程&#xff0c;APK安装到你的Android手机上的过程&#xff0c;最后安装好的形态&#xff0c;以…

Mint_21.3 drawing-area和goocanvas的FB笔记(五)

FreeBASIC SDL图形功能 SDL - Simple DirectMedia Layer 是完整的跨平台系统&#xff0c;有自己的窗口、直接捕获键盘、鼠标和游戏操纵杆的事件&#xff0c;直接操作音频和CDROM&#xff0c;在其surface上可使用gfx, openGL和direct3D绘图。Window3.0时代&#xff0c;各种应用…

准谐振PWM控制器-能够实现多种保护功能FAN6921MRMY 功率因数控制器

高度集成的FAN6921MRMY将功率因数控制器 (PFC) 和准谐振 PWM 控制器相结合。集成提供了成本高效的设计&#xff0c;可减少外部组件数量。对于 PFC&#xff0c;FAN6921MRMY使用控制导通时间技术提供调节的直流输出电压&#xff0c;执行自然的功率因数校正。FAN6921MRMY使用创新的…