程序的机器级表示

历史观点

IA32,x86-64得32位前身。

程序编码

void multstore(long x, long y, long *dest)
{
	long t = mult2(x, y);
	*dest = t;
}
multstore:
	pushq	%rbx
	movq	%rdx, %rbx
	call 	mult2
	movq	%rax, (%rbx)
	popq	%rbx
	ret
53	48	89	d3	e8	00	00	00	00	48	89	03	5b	c3

机器级代码
代码示例

操作数

源数据:常熟形式给出 \ 寄存器或内存中读出
结构:存放在寄存器或内存中

立即数

关于格式的注解

数据格式

字:16位
双字:32位
四字:64位

访问信息

x86-64CPU包含一组16个64位值得通用目的寄存器。

数据传送指令

压入和弹出栈数据指令

移位操作

算术操作

算术和逻辑操作

加载有效地址
一元和二元操作
移位操作
讨论
特殊的的算术操作

控制

条件码
访问条件码
跳转指令
跳转指令编码
用条件控制来实现条件分支
用条件传送来实现条件分支
循环
switch语句

过程

运行时栈
转移控制
数据传送
栈上的局部存储
寄存器中的局部存储空间
递归过程

数组分配和访问

基本原则
指针运算
嵌套的数组
定长数组
变成数组

异质的数据结构

结构
联合
数据对齐

在机器级程序中将控制与数据结合起来

理解指针
应用:使用GDB调试器
内存越界引用和缓冲区溢出
对抗缓冲区溢出攻击
支持变长栈帧

浮点代码

浮点传送和转化操作
过程中的浮点代码
浮点运算操作
定义和使用浮点常数
在浮点代码中使用位级操作
浮点比较操作
对浮点代码的观察结论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值