思维导图
前言
谈一下为什么想写博客 ,第一个原因是想记录我的读书心得,通过做思维导图的方式来概括每一个章节的主要内容,这样就可以理清一本书的主要脉络。过一段时间后,即使部分知识点有遗忘,也可以做到快速地回文定位,而不是盲目搜索。第二个原因是notability和goodnotes上都不能满足我对于跨平台编辑的需求,也曾尝试用过wps和pages这样的办公软件但也有诸多不便,比如:代码不能高亮,排版很混乱等。最后一个原因是想借助这样一个平台与大家一起交流,共同进步。
AT&T
AT&T汇编基础
IA-32指令
1、两个概念: 指令指针和数据指针
数据指针指向堆栈,指令指针指向当前运行中的指令
2、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寄存器决定
- 通过软件中断来调用内核函数,每一个内核函数需要传入参数。而栈就是用户程序与内核函数的交换空间
- 程序执行流程图
通过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盘