GCC、objdump、机器表示基础知识

本文介绍了学习机器代码的原因和基础,包括使用GCC编译器的调用方式,如-Og和-o参数,以及机器级编程的抽象概念。讨论了程序计数器、整数寄存器、条件码寄存器等汇编程序员可见的寄存器。此外,还对比了ATT和Intel汇编代码格式的区别。
摘要由CSDN通过智能技术生成

GCC、objdump、机器表示基础知识

前言

​ 最近在看CSAPP(深入理解计算机系统)第三章,打算将自己所学的知识及学习的过程记录下来,以免学了跟没学一样。自从上大学后就一直没有怎么好好学习了,希望自己能够从今天起,每天学习一点点,逐渐改变自己颓废的生活方式。不求一天学多少内容,但求能够细水长流,每天都能在短暂的学习的时间里保持充沛的精力。

​ 如书中所言,人们在学习时常常会这样想

我理解了一般规则,不愿意劳神去学习细节

​ 我们总是觉得理解了一个知识点,可以证明自己的智力,而学习细节则是枯燥而又无聊的。这也是我的思维方式,我总觉得不应该在简单的事情上浪费时间,于是现在薄弱的基础严重制约了我的能力。在每个领域的学习之初,必然有大量重复而又无聊的基础知识,和一些琐屑般的细节,我们往往会忽视它们。当遇到能力的瓶颈的时候,对造成这一切的原因一无所知,也许恰恰就是那些被自己忽视掉的细节。

​ 步入正题,开始对csapp第三章——程序的机器级表示的学习。

下面是学习机器代码的原因、能力要求及学习方式。

在这里插入图片描述
本章使用x86-64 Linux平台,GCC编译器,objdump反汇编器

基础知识
GCC的调用方式
linux> gcc -Og -o p p1.c p2.c

-Og 使用能够生成符合原始C代码整体结构的机器代码的优化等级。(便于学习,如果无法使用,则使用-O1)

-o p 用于将生成的可执行文件命名为p

机器级编程的抽象方式:
  1. 由指令集体系结构来定义机器级程序的格式和行为,将程序行为描述成每条指令按顺序执行的
  2. 机器级程序所使用的内存地址是虚拟地址,操作系统负责将虚拟地址翻译成实际处理器内存中的物理地址
汇编程序员可见寄存器
  • 程序计数器(“PC”,在x86-64中用%rip表示)给出将要执行下一条指令在内存中的地址。
  • 整数寄存器 包含16个命名的为之,存储64位的值,可以存储地址或整数数据,及其他特定功能。
  • 条件码寄存器 保存最近执行的算术或者逻辑指令的状态信息。实现例如if或while语句。
  • 向量寄存器 存放一个或多个整数或浮点数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值