汇编总结-第一部分_2_linux下汇编的相关工具
来源:互联网 发布:十丈铜嘴 知乎 编辑:程序博客网 时间:2024/04/28 13:46
一个汇编程序员至少应该有下面这些工具:
1.汇编器
2.连接器
3.调试器
汇编器自然不用说,就是将汇编代码转换成目标代码的程序.注意是目标代码,windows平台上的可能会理解成最终的二进制代码,原因其实就是你们所用的IDE真的是给你们做了太多隐藏的工作..
连接器就是将目标代码连接起来的工具.从而组成可执行文件.
汇编语言程序主要由3部分组成,
1.操作码助记符
2.数据段
3.命令
第一篇我就说过,汇编语言其实是没有语法标准的,其中最大的区别主要在于汇编器命令.
对于每个汇编器,命令都是独特的..这也是为什么我学了16位的汇编还要去看32位汇编的原因..如果想在linux下工作的话还是直接学AT&T汇编算了.以后手机上用arm芯片我想也可以直接用linux的汇编器来写吧,估计精简指令集的话,会在这个基础上再删除一些指令吧.
连接器需要知道你的代码中任何函数的具体实现代码.所以外部函数必须包含在目标代码中或者动态链接库(比如C中的printf,估计shell也是用的这个来显示命令行的吧.)
顺带说一下高级语言所需的工具
1.编译器
2.目标代码反汇编器(搞逆向的必备工具?)
3.简档器
编译器自然不用说,不过很多新手还是很容易把编译器和编辑器搞混呢..vi是编辑器,只负责编写代码的工作,只有编译器才能让代码生成汇编代码或者可执行程序(编译器一般会自己进行连接工作,并且调用as命令将汇编代码生成目标代码).
简档器(profiler)这是个分析程序运行的好工具啊.你可以运行一段程序,然后分析哪个函数运行多久.原来学16位汇编的时候还不知道有这么好的东西.等下介绍的时候可以自己编个程序来用用这个简档器
安装汇编器
rpm -qa | grep binutils
dpkg -l | grep binutil
tar -zxvf binutils-xx.xx.tar.gz(xx表示按照之前显示的来)
./configurs (检查宿主系统以便确保编译包所需的所有包和工具在系统上是可用的)
.make (make install,书上指示写的是make但是下面写的是make install,..)
我的系统用的是centos6.4的.然后裸机安装到破烂的笔记本上.选择的开发者的选项.所有的环境就可以使用了.所以也没怎么管过安装..有问题的话可以把结果告诉我~
貌似我给同学装虚拟机的时候没有这个选项,所以可能读者需要了解一下.
至于汇编器的参数常用的也就下面这么几个
-a
指定输出信息
--gstabs
包含每行源代码的调试信息(gdb调试)
--gstabs+
包含专门的gdb调试信息
-J
不警告带符号溢出
-o
指定输出目标文件的名称
-R
把数据段合并进文本段
--statistics
显示汇编使用的最大空间和总时间
-W
不显示警告信息
--
对于源文件使用标准输入(就是两个’-’,这一条我还没用过..)
就像这样使用,在shell模式下
as -o test.o test.s
GNU连接器ld
这个的命令格式好多..不过也用不到那么多,大多就这样
ld -o mytest mytest.o
目标代码文件mytest.o就生成了可执行文件.mytest
-l
把指定的存档文件添加到要连接的文件清单
-L
把指定的路径添加到搜索库的目录清单
-n
设置文本段为只读
-no-keep-memory
生成优化了的输出文件
-O(大写)
生成优化了的输出文件
-o
指定输出文件的名称
-rpath
把指定的目录添加到运行时库搜索路径
-shared
创建共享库
-Ttest
使用指定的地址作为文本段的起点
-Tdata
使用指定的地址作为数据段的起点
-Tdata
使用指定的地址作为bss段的起点
很多命令参数我也是第一次发现.貌似-T开头是系统开发人员必备参数?
-rpath 如果是写汇编的库来给高级语言用的话基本就不用了.都是把汇编程序封装成静态或动态的库来用的.
编译器gcc
生成可执行程序就像这样
gcc -o ctest ctest.c
想当年刚接触linux就这么几行命令都不知道怎么敲呢.....
-c
编译或者汇编代码,但是不进行连接
-S
编译后停止,但是不进行汇编(也就是生成汇编代码)
-o
指定要使用的输出文件名(貌似不用也可以)
-g
生成调试信息(与gdb一起用)
-O
优化可执行代码(有3级别,除此还有-O2 -O3)
-W
设置编译器警告消息级别
-pedantic
按照C标准发布强制性诊断清单
-I
指定包含文件的目录
-L
指定库文件的目录
-D
预定义源代码中使用的宏(用宏来调试C/C++代码的时候用)
-gp
生成gprof制作简档要使用的额外代码
这里面的好几个之前都没注意.-pedantic貌似是个对学习语言很好的个指令参数.
GNU调试器gdb
通常都要跟编译器和汇编器一起联用,必须在生成可执行文件的时候加上相应的参数.
比如
gcc -gstabs -o ctest ctest.c
gdb ctest
gdb的参数没用过,主要还是用gdb内部的命令
break
设置断点
watch
设置监视变量,达到特定值的时候停止
info
查看寄存器,堆栈和内存的信息
x
检查内存位置
显示变量值
run
在调试器内开始程序的执行
list
列出指定的函数或者行
next
执行程序中的下一条指令(不进入函数)
step
执行程序的下一条指令(进入函数)
cont
从停止的位置继续执行程序
until
运行程序,直到打到指定的源代码行
用的比较多的就是break,watch,print,next,step,cont了.在汇编里面的话info用的也比较多的.
GNU的反汇编程序objdump
这个程序部只用于反汇编,由于命令很多,对于linux下都用开源软件,所以就只介绍一下反汇编命令 -d
gcc -c ctest.c
objdump -d ctest.c
这样就可以看ctest.s的程序了.不过汇编代码中的标识全部变成了逻辑地址的形式了.
GNU简档器程序 gprof
重要的东西出现了!!应该服务器开发的人都该知道这个吧..不过这个东西参数也很多....
参数主要分为3组:
1.输出格式参数
2.分析参数
3.杂项参数
格式参数
-A
显示所有函数的源代码,或者值相爱你是指定函数的
-b
不显示解释分析字段的详细输出
-C
显示所有函数的总计数,或者只显示指定函数的
-i
显示简档数据文件的摘要信息
-I
指定查找源文件的搜索目录清单
-L
显示源文件名的完整路径名称
-p
显示所有函数的一般简档,或者只是显示指定函数的
-P
不输出所有函数的一般简档,或者不显示指定函数的
-q
显示调用图标分析
-Q
不显示调用图表分析(貌似没用?)
-Z
不显示函数的总计数和被调用的次数
--function-reordering
按照分析显示建议的函数的重排序
-w
设置输出行的宽度
-x
在函数之内显示被注解的源代码中的每一行
分析参数
-a
不分析静态声明的函数的信息
-c
分析程序中永远不会被调用的子函数的信息
-l
按行分析
-m
只分析被调用超过指定次数的函数
-n
只分析指定的函数的时间
-N
不分析指定的函数的时间
z
分析所有函数,即使是从不被调用的那些
杂项
-d
使gprof处于调试模式中,指定数字化的调试级别
-O
指定简档数据文件的格式
-s
使gprof只在简档数据文件中汇总数据
-v
输出gprof的版本
使用如下:
gcc -o demo demo.c -pg
./demo 会在相同目录下生成gmon.out的文件.这是图表简档文件
gprof demo > gprof.txt 生成完整的报告输出到gprof文件中.txt不是必须的
这样基本就有了一个完整的linux下汇编开发环境了.
下一篇开始真正的开始写汇编程序了!
- 汇编总结-第一部分_2_linux下汇编的相关工具
- 汇编总结-第一部分_1_AT&T汇编的基本介绍
- 汇编总结-第一部分_3_汇编的程序组成
- 汇编知识总结--第一部分
- 我与汇编--第一部分
- 汇编总结-第三部分_1_内联汇编
- (收集)Linux下的汇编相关文章
- Linux下的objdump反汇编工具
- 整理的汇编工具、汇编网站和汇编教学平台总结
- 汇编总结-第三部分_2_GNU下优化代码
- 汇编的初步总结
- 我的第一个汇编
- Minix下的汇编
- Linux下的汇编
- 汇编16位部分学习总结!
- 汇编总结-第二部分_1_数据传送
- 汇编总结-第二部分_2_数据处理
- 汇编总结-第二部分_3_使用函数
- Android fill_parent、wrap_content和match_parent的区别
- 美国原油出口政策或在2015年放松
- 启动nginx 报错 error while loading shared libraries: libpcre.so.1: cannot open shared object file
- Java Ext Struts1的下载文件(多重文件夹压缩)
- phonegap npm 安装失败
- 汇编总结-第一部分_2_linux下汇编的相关工具
- 二值图像的距离变换研究
- 剩女是中国为了推高房价的一大阴谋
- Pango-CRITICAL **: pango_layout_get_text: assertion `PANGO_IS_LAYOUT (layout)' failed
- ios 图片拼接 图片缩放 将webView上面的内容转化为图片 归纳整理
- 手工整理我国银行业分类情况,加深印象。
- opencv显示图片小程序
- 汇编总结-第一部分_3_汇编的程序组成
- fedora17下用gdb和bochs调试linux-0.11内核