北邮CSAPP第三章之数据格式与程序编码

程序的机器级表示

本章学习内容:汇编代码

高级语言屏蔽了程序的机器级实现。
用高级语言编写的程序可以在不同的机器上运行,汇编代码则于特定机器密切相关

学习汇编代码能理解编译器优化能力,并分析代码中隐含的低效率
此外,高级语言提供的抽象层会隐藏我们想要了解的程序的运行时行为
此外,很多攻击都涉及到程序存储运行时控制信息的方式的细节

逆向工程:通过研究系统和逆向工作,试图了解系统的创建过程

IA32:x86-64的32位前身(机器可以向后兼容IA32程序)

  1. C语言、汇编代码以及机器代码之间的关系
  2. x86-64的细节
  3. C语言的控制结构的实现
  4. 过程的实现
  5. 数组、结构、联合等数据结构的实现
  6. 内存越界问题
  7. 系统易遭受缓冲区溢出攻击的问题
  8. GDB调试器检查机器级程序运行时的行为技巧

历史观点

Intel处理器俗称x86,最开始的时候是单芯片

每个后继处理器都是向后兼容的:较早版本的代码可以在较新的机器上运行

  • 摩尔定律
    晶体管数量以每年大约37%的速率增加=>每26个月翻倍
    摩尔定律:1965年,摩尔预测在未来10年,芯片上的晶体管数量每年都会翻倍。在超过50年的事件里,半导体工业能使得晶体管数目每18个月翻倍

这些年出现了很多与Intel处理器兼容的处理器,例如AMD

经过了数十年的发展,曾经的晦涩难懂的特性已经不再会出现了

数据格式

byte:8位
word:16位
double word:32位
quad word:64位
标准int为双字,64位的指针为四字

x86-64指令集包括对完整的针对字节、字、双字的指令

C Intel数字精度 汇编代码后缀 大小(字节)
char 字节 b 1
short w 2
int 双字 l(long word) 4
long 四字 q 8
char * 四字 q 8
float 单精度 s 4
double 双精度 l 8

大多数GCC生成的汇编代码指令带有一个字符的后缀,表明操作数的大小
例如:数据传送指令有四种:

  1. movb
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值