标签:
在linux平台下常用的编译器为as,连接器为ld,使用的文本编辑器为vim,汇编语法为att
以下是一些工具:
addr2line 把地址转换为文件名和行号
ar 创建,修改和展开文件存档
as 汇编器
c++filt 还原c++符号过滤器
gprof 显示程序简档信息
ld 把目标代码文件链接
nlmconv 把目标代码转换为Netware loadable Module格式
nm 列出目标文件中的符号
objcopy 复制和翻译目标文件
objdump 显示来自目标文件的信息
ranlib 生成存档文件的索引
readelf 按照elf格式显示来自目标文件的信息
size 列出目标文件或者存档文件的段长度
strings 显示目标文件中可打印的字符串
strip 丢弃符号
windres 编译windows资源文件
上面是GNU的开发包binutils中的工具,我们主要用到as和ld这两个工具,也可以直接使用gcc,我们使用gdb进行调试.
1.使用as与ld
a.使用as,把汇编文件转换成目标文件,基本用法如下:
1 as --32 -o xxx.o xxx.s
其中--32是告诉汇编器生成32位的目标文件,如果系统是32位的可以不加这个参数,64位的系统请加上这个.
b.使用ld连接目标文件,基本用法如下:
1 ld -m elf_i386 -o xxx xxx.
其中-m elf_i386也是因为32位系统的原因.
2.使用gcc
我们可以写个简单的helloworld
1 #include <stdio.h> 2 3 int main() 4 { 5 printf("Hello world!\n"); 6 return 0; 7 }
把文件保存为helloworld.c,使用以下命令可以得到它的汇编代码
1 gcc -S helloworld.c
编译文件,命令如下
1 gcc helloworld.c -o helloworld
3.使用gdb
我们可以使用gdb来调试程序,可以使用以下命令载入文件(使用gdb调试的文件,须在编译时加入-g这一个参数)
1 gdb -q xxx
// 或者已经启动gdb,我们可以使用file xxx
gdb的常用命令有,如下:
break 设置断点
watch 设置监视点
info 观察系统元素
x 检查内存位置
print 显示变量值
run 运行程序
list 列出指定函数或者行
next 执行下一条指令
step 执行下一条指令
cont 从停止的位置继续执行程序
until 运行程序直到指定行
4.使用objdump
这个工具我经常使用可以进行反汇编,很容易得到程序汇编代码
1 objdump -d xxx
我没有直接写helloword的博文当开始,我准备第二篇再写,我觉得"工欲善其事,必先利其器",先写相关工具的使用比较好.至于什么汇编,以及计算机原理后面,继续慢慢研究吧^_^ 最起码已经开始学习了!!!
标签:
原文地址:http://www.cnblogs.com/xiaoxiaoxiaoxuesheng/p/linux_asm_0x00.html