深入理解计算机系统 第3章 程序的机器级表示

本文详细介绍了计算机系统中程序的机器级表示,包括编译过程、机器级代码、指令集架构、数据和寄存器、寻址方式、控制指令以及过程。重点讨论了汇编代码的生成、数据对齐、指针操作、缓冲区溢出的安全问题,还涉及了浮点代码和栈帧管理。通过对各种指令的解析,如 movq、leaq 和 idivl,阐述了处理器如何处理数据和控制程序流程。
摘要由CSDN通过智能技术生成

编译

gcc -Og -o p pl. c p2 .c

-Og告诉编译器使用会生成符合原始C代码整体结构的机 器代码的优化等级。-O1 -O2

C预处理器 插入所有用#include命令指定的文件,并扩展所有用#define声明指定的宏。

编译器 产生两个源文件的汇编代码,名字分别为pl.s和p2.s。

汇编器会将汇编代码转化成二进制目标代码文件pl.。和p2.o。没有填入全局值的地址

链接器将两个目标代码文件与实现库函数(例如printf)的代码合并,并产生最终的可执行代码文件P(由命令行指示符-o p指定的)

机器级代码

指令集架构 ISA 定义机器级程序的格式和行为
机器级程序使用的内存地址是虚拟地址

gcc -Og -S instore. c
long mult2(long, long;

void multstore(long x, long y, long *dest) {
   
	long t = mult2(x, y);
	*dest = t;
}

gcc运行编译器 产生一个汇编文件 mstore.s
在这里插入图片描述

gcc -Og -c mstore. c

gcc会编译并汇编该代码 产生mstroe.o 二进制格式

反汇编器

objdump -d instore. o

ATT格式 gcc -Og -S mstore. c
Intel格式 gcc -Og -S -masm=intel mstore. c

指令

数据

字 16位
在这里插入图片描述
32位数被看成是“长字(long word)

寄存器

16个存储64位值的通用目的寄存器
在这里插入图片描述
生成1字节和2字节数字的指令会保持剩下的字节不变;生成4字节数字的指令会把高位4个字节置为0。

寻址

立即数 ATT格式 $ 后跟一C语言表示法表示整数
寄存器 ra表示任意寄存器a 引用R

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值