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汇编语言——工具及程序组成的更多相关文章
- TMS320C54x系列DSP指令和编程指南——第1章 汇编语言工具概述
第1章 汇编语言工具概述 TMS320C54x DSP的汇编语言开发工具包括: ■ Assembler ■ Archiver ■ Linker ■ Absolut ...
- Java开发工具与程序调试
开发工具:MyEclipse,Eclipse等. 程序调试: (1)断点:设置断点是程序调试中必不可少的手段,Java调试器每次遇到程序断点时都会将当前线程挂起,即暂停当前程序的运行.(在Eclip ...
- Vs2015 c# 诊断工具查看程序的占用情况
windbg用着还不熟悉,dottrace 还要版权,着急查看程序的cpu 的使用情况,因为程序开启之后占用处理器资源较大,问题在哪里呢,于是点开了vs2015自带的诊断工具,以前偶尔打开过,没发现 ...
- 利用Qt自带工具发布程序
Qt官方开发环境生成的exe发布方式--使用windeployqt 从开始菜单-->Qt 5.4.0-->5.4-->MinGW 4.9 (32-bit)-->Qt 5.4 f ...
- 汇编语言第二版 程序在dos中执行情况.P86-87
假设程序要被dos系统加载到sa:0000的内存中,在这个地址的内存开始会有256个字节的PSP程序,用于加载程序和dos系统的通信.ds中的地址为sa. 真正的程序会在这256个字节之后.所以真正程 ...
- IE的debug工具对程序进行debug跟踪JS代码
2015/8/31 (其他的:显示zjfy_app_sys_ip.html,只需关闭启用保护模式) 显示ie的debug,F12-->Ctrl + P 扩展:第一步,在程序中设置断点,如图所示左 ...
- Java队列工具类(程序仅供练习)
public class QueueUtils<T> { public int defaultSize; public Object[] data; public int front = ...
- 使用WinDbg下的gflags工具导致程序无法执行
问题:the system cannot find file **.exe. 解决方法:开始-运行-输入regedit打开注册表编辑器,找到 HKEY_LOCAL_MACHINE/SOFTWARE/M ...
- 利用vs自带工具分析程序性能
测试程序写好后可以通过VS2010分析菜单里选择启用性能向导 选择CPU采样后就选择需要分析的项目 测试项目选择完成后就可以运行分析,结束分析后VS2010会提供个详细报告文档 从分析结果来看GetC ...
随机推荐
- 5、清理mac缓存和关闭后台运行程序
一.清理mac 缓存 1.用鼠标点击桌面,然后按快捷键Command+Shift+G前往文件夹 2.输入路径:~/Library/Caches/ 3.清除所有的数据,把所有的Caches文件夹得都行 ...
- WPF 虚拟键盘
之前做了一款WPF虚拟键盘,调用Win32的API,可以模拟键盘事件. 现将代码分享如下: 按键布局如下: <Button Name="> <StackPanel Orie ...
- h5自动生成工具
一.前言 写了很多h5之后,对于写手写html和css已经麻木的我决定动手写个工具自动生成h5结构和样式.其实这个想法由来已久,但总是觉得自己技术不够,所以一直没实行.直到某天我真的写够了,我决定动手 ...
- 利用Formdata实现form提交文件上传不跳转页面
作者:幻月九十链接:https://www.zhihu.com/question/19631256/answer/119911045来源:知乎著作权归作者所有,转载请联系作者获得授权. $('form ...
- SQLSERVER 2012之AlwaysOn -- 一次硬件升级引发的问题
这是上周遇到的一个案例:对已有的硬件进行升级而引发的问题,期间还触发了一个比较严重的BUG,可谓多灾多难:不过值得庆幸的是,在一连串连锁问题出现的时候,并没有出现人工操作失误(这往往是在处理故障中风险 ...
- 使用jsPlumb制作流程图设计器
jsPlumb是一个比较强大的绘图组件,它提供了一种方法,主要用于连接网页上的元素.在现代浏览器中,它使用SVG或者Canvas技术,而对于IE8以下(含IE8)的古董浏览器,则使用VML技术. 项目 ...
- [转]DOS特殊字符转义方法
http://www.robvanderwoude.com/escapechars.php 期望得到的字符 转义后字符 说明 % %% May not always be required in do ...
- Python爬虫 -- 抓取电影天堂8分以上电影
看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...
- 博客恢复更新 工作环境转移到Linux
嗯, 回来了. 工作了, 以后学习和写博的时间只能靠挤了, 相信挤一挤总会有的.最近的一些计划: 重拾基础 玩好linux wid, 2014-04-27
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...