AT&T汇编语言——工具及程序组成

1.开发工具

在汇编语言中,用到的工具主要用以下几个:

汇编器、连接器、调试器、编译器

因为我在这里的是AT&T汇编语言,所以工具下也都是gnu下的那些。

1.1 汇编器(as)

汇编器有很多,masm,nasm,gas等,不像高级语言,虽然都叫汇编语言,但不同的汇编器,其语法是存在很大不同的。Intel汇编的书籍到处可见,可是AT&T的却少之又少。但想看Linux内核的话,还是要对AT&T汇编熟悉才行。这也许是自己为什么学习汇编的原因吧。说到汇编器,我们用的是as,其可选参数有很多,但我们用的几个:

比如我们要汇编test.s为ia-32平台的test.o,

$ as  --32  -o test.o test.s

这里只用到了两个参数--32和-o

--32:是指定为ia-32平台代码,

-o :后接目标文件

 1.2 连接器(ld)

我们选择ld.用到的参数主要有以下几个:

-m elf_i386 :将目标代码连接成elf_i386格式(即32位平台下的代码)

-o :后接目标文件

 

1.3调试器(gdb)

主要的命令有:

list :列出指定的函数或行

break :设置断点

run     :运行

next    :下一条指令

step     : 执行程序中的下一条指令

1.4编译器(gcc)

纯汇编可以不用gcc。gcc 的参数用到的也不多,有以下几个:

-g:调试模式的代码

-o:后接目标代码

-m32:生成ia32平台代码

1.5 其他一些工具

1.5.1 objdump

Objdump是一个非常有用的工具 ,其可以实现反汇编

主要用到的参数有:-d 表示将目标代码反汇编成指令码

1.5.2 gprof

gprof打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗时最多的函数。

1.5.3 操作系统 linux

我的测试环境是ubuntu 14.04  (x86_64 ),但自己学的只是ia-32位汇编,所以,使用--32、-m32、-m elf_i386 生成32位代码

2 .汇编语言的模板范例

其实,单纯用汇编来开发的程序已经很少了。我学习这个,主要目的有两个:

1.看懂Linux内核中的代码

2.看懂C/C++等程序生成的汇编代码

所以,我更希望所用的汇编格式能直接与C语言链接起来。

2.1 汇编程序组成 

汇编语言由定义好的段组成,每个段都有不同的目的。三个常用的段如下:

数据段(.section .data)

声明带有初始值的数据元素,用作汇编 语言程序中的变量

bss段 (.section .bss请问中文该如何翻译?)

用途汇编语言的缓冲区

文本段 (.section .text)

存放代码

2.1.1 定义段的方法

GNU汇编器使用.section命令语句声明段。.section语句使用一个参数——它声明的段的类型。如下图所示。这将是我们以后要使用的布局 。

2.1.2 定义段的起点

当汇编语言程序被转换成可执行文件时,连接器要知道指向的起点,gnu汇编器声明一个默认标签_start,表明程序从这条指令开始。当然,也可以使用连接器参数-e来定义新的起始名称。

好,下面来总结一下我们的汇编语言的基础模板:

.section .data

    <有初始值的数据放在这>

 .section .bss

    <未初始化的值放在这>

.section .text

.globl _start

_start:

<运行代码放在这>

今天就写到这吧,明天用具体实例来说一下今天所说的工具的用法。

AT&T汇编语言——工具及程序组成

时间: 2024-08-09 21:58:37

AT&T汇编语言——工具及程序组成的相关文章

[转帖]11个代码质量审核和管理工具,程序员收藏

11个代码质量审核和管理工具,程序员收藏 https://developer.51cto.com/art/201912/607936.htm 如今,代码质量分析和审核已成为每个企业的基本流程.随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要.不良的代码不仅会影响代码的可维护性,而且还会在某些情况下影响其性能. 作者:云智时代来源:今日头条|2019-12-17 17:54 收藏 分享 如今,代码质量分析和审核已成为每个企业的基本流程.随着开源代码库使用的增加,安全性和代码质量

20款安全测试工具为程序安全保驾护航

针对安全性测试的工具非常多,慧都小编主要推荐20款,非常实用的安全测试工具,希望能帮到大家. Babel Enterprise Babel Enterprise 是一款企业级的安全监控平台,可以检查OS安全状态:用户名/密码.内核选项.文件权限.补丁.网络设置.SUID.二进制文件更改等. BFBTester BFBTester是一款对二进制程序进行安全检查,确定输入参数.环境变量等是否存在溢出问题的工具. Brakeman Brakeman是一个针对Ruby on Rails应用的开源安全扫描

以rpm为后端及以yum为前端工具的程序包管理器在Linux发行版系统centos中的使用

程序包管理: 应用程序的安装,实际上是解压缩并复制程序包中的文件到指定目录的过程: 程序包管理器: 方便终端用户进行程序的安装.卸载.升级.安装信息查询及校验等工作: 不同的Linux的发行版本中,有不同的程序包管理器: Debian:dpt:Redhat:rpm:S.u.S.E:rpm:Gentoo:借鉴了FREEBSD的portage程序包管理机制,ports方式,emerge工具:ArchLinux:pacman 以CentOS为例,rpm程序包管理器: rpm程序包的命名规则: 源代码包

11个代码质量审核和管理工具,程序员必备!

如今,代码质量分析和审核已成为每个企业的基本流程.随着开源代码库使用的增加,安全性和代码质量对于构建高质量软件至关重要.不良的代码不仅会影响代码的可维护性,而且还会在某些情况下影响其性能.此外,更好的代码质量还有助于企业将来减少维护和降低成本.幸运的是,有很多审核和管理代码的工具,为开发者和程序员提供了发现代码问题的解决方案. 1.SonarQube SonarQube是市场上最受欢迎的代码质量和安全性分析工具.它在开源社区的支持下,目前可以分析和产生对超过25种编程语言的输出,这比市场上大多数

汇编语言第二版 程序在dos中执行情况.P86-87

假设程序要被dos系统加载到sa:0000的内存中,在这个地址的内存开始会有256个字节的PSP程序,用于加载程序和dos系统的通信.ds中的地址为sa. 真正的程序会在这256个字节之后.所以真正程序的地址是:sa+10H:0000.cs中的地址为:sa+10h 为什么是10h,因为段地址要左偏移4位,相当于*16 ,16*16=256.

基于nodejs的一个实时markdown转html工具小程序

1.版本一 - 1.1`npm install marked --save` 安装markdwon转html的包.- 1.2 使用watchFile监视 markdown文件 /** * Created by liyinghao on 2016/11/8. */ const fs = require('fs') const marked = require('marked') //1.实时监视note.md文件的变化 fs.watchFile('./note.md',(curr,prev)=>{

使用RPM包工具和源码包编译安装Linux应用程序

系统命令:一般在/bin和/sbin目录中,或为Shell内部指令,完成对系统的基本管理工作,例如IP配置工具 应用程序:通常在/usr/bin和/usr/sbin目录中,完成相对独立的其他辅助任务,例如网页浏览器 Linux应用程序的组成 /usr/bin     普通可执行程序文件,普通用户即可执行 /usr/sbin    服务器程序.管理程序文件,只有管理员能执行 /etc         配置文件,文件较多时会创建子目录 /var/log     日志文件 /usr/share/doc

2017年&quot;程序媛和工程狮&quot;绝对不能忽视的编程语言、框架和工具

2017年"程序媛和工程狮"绝对不能忽视的编程语言.框架和工具 IT程序狮· 9 天前 在过去的一年里,软件开发行业继续大踏步地向前迈进.回顾 2016 年,我们看到了更多新兴的流行语言.框架和工具,它们改变着我们的工作方式,让我们看到更多的可能.但在这个行业,紧随潮流是很难的.所以在每年年底,我们都会给你提供一些建议,它涉及什么是最重要的,以及你在未来一年中应该学习什么. 大趋势 渐进式 Web Apps 在 2016 年里,我们见证了 Progressive Web App 概念的

Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs

http://www.vpser.net/manage/nethogs.html   来自.  最后略有修改 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监控网卡流量的.但是当我们的服务器或 VPS的带宽被大量占用或占满,却没找不到称心的工具或程序来查看到底是哪个程序或进程占有率多少带宽.虽然在Windows上查看进程占用带宽情况的软件很多,像某3**.某Q家的电脑管家.IP雷达等.但是Linux下这一类软件很少,今天我们介绍的就是Linux的一款查看