[C指针原理揭秘] AT&T汇编

思维导图
在这里插入图片描述

前言

谈一下为什么想写博客 ,第一个原因是想记录我的读书心得,通过做思维导图的方式来概括每一个章节的主要内容,这样就可以理清一本书的主要脉络。过一段时间后,即使部分知识点有遗忘,也可以做到快速地回文定位,而不是盲目搜索。第二个原因是notability和goodnotes上都不能满足我对于跨平台编辑的需求,也曾尝试用过wps和pages这样的办公软件但也有诸多不便,比如:代码不能高亮,排版很混乱等。最后一个原因是想借助这样一个平台与大家一起交流,共同进步。

AT&T

AT&T汇编基础

IA-32指令

1、两个概念: 指令指针和数据指针
数据指针指向堆栈,指令指针指向当前运行中的指令

2、IA-32 指令码格式
IA-32指令
instruction prefixes : 指令前缀
opcode: 操作码
Mod R/M 寻址方式说明
SIB 比例-索引-基址
displacement 移位: 定位具体的位置
immediate 数据元素: 完成功能所需要的数据

3、汇编的作用
特点: 1、采用助记符代表特定机器语言的操
2、移植性较差,只适用于某种计算机体系结构
3、速度快,对硬件底层直接操作,有利于图形处理和高性能运算

4、AT&T 汇编语言的特点
概念: 助记符
用不同的单词表示不同的指令码, 代替了枯燥无味的二进制编码

AT&T适用的操作系统: linux

5、 AT&T 汇编的主要特点:
1、s 作为后缀名 # 代表注释 %作为寄存器的前缀$立即数,第二种情况$data 表示的获取变量的地址
2、movl %eax %ebx 目标操作数载源操作数的右边
3、操作数的字长由操作符的最后一个字母决定,后缀’b‘,’w‘,’l‘
4、远程转移和远程子调用指令的操作码分别为ljump和lcall

6、第一个汇编程序
在屏幕上输出"B"以及换行符,因为不用的操作系统的汇编代码不用,首先以FreeBSD 系统为例

  • AT&T 汇编规则是通过section来申明不同的段 eg. .section .data 是指数据段 类似于c语言中的 unsigned char output[2]={46,10} .section .text 为代码段
  • 代码段中的语句global_start ,标注了程序的起始点。
    相当于C语言的main函数
    global_start 的含义是指当汇编程序运行时,指令指针从_start标签处开始运行
  • (%edx)的意思是 目标操作数在%edx指向的内存地址中
  • 将参数压入栈中的目的是使用UNIX内核的系统调用
  • int $0x80 表示使用int 指令码,生成具有0x80的软件中断,而要求内核执行的具体操作由eax寄存器决定
  • 通过软件中断来调用内核函数,每一个内核函数需要传入参数。而栈就是用户程序与内核函数的交换空间
  • 程序执行流程图
返回
用户态
参数压入栈中
用int $0x80 触发软件中断
执行内核函数取出参数

在这里插入图片描述
通过as 和 ld 对汇编程序进行编译和链接

程序运行机制

c程序运行机制

  • 由CPU直接运行脚本
  • 编译型语言,由编译器输出二进制执行文件
  • 需要用到的编译器是gcc
  • C语言生成的二进制可执行文件分为应用程序和库文件
  • 库文件: 不能直接执行,但是提供了程序调用的功能接口,是汇编后的二进制代码。分为静态库文件和动态库文件

脚本运行机制

  • java python
  • 是由解释程序读取后运行,解释程序负责运行脚本语言的指令
  • 需要脚本语言编译器

杂记

在Linux操作系统中挂载U盘

在没有GUI的桌面系统中访问U盘并且进行文件复制和访问
终端命令查看U盘目录

  • su root 切换到超级用户的模式,
  • sudo fdisk -l 查看所有磁盘信息
  • 新建一个目录作为U盘的挂接点。比如说要把U盘挂载到 /mnt/usb,那么需要采用下列命令新建 /mnt/usb。
  • mount命令把U盘挂载在/mnt/usb。
    mount /dev/sdb1 /mnt/usb
    mount(挂载)可以把设备里的文件树连接到linux系统的文件树上
  • umount命令解挂U盘
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值