登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

仙剑奇侠传的博客

羽化成仙

 
 
 

日志

 
 

GNU工具写汇编入门  

2011-08-19 22:42:19|  分类: 汇编 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

GNU的gcc提供了对汇编源码进行编码、连接的功能,其汇编语法为AT&amp,当然可以支持intel汇编语法。

本汇编程序的开发工具为gcc在window平台的开发工具,MinGW。

  1. 示例
  1. 最简单无意义的源代码hello.s

    #这是一个汇编程序

    .section .data

    .section .text

    .globl _start

    .def    _start;    .scl    2;    .type    32;

    _start:

    pushl %ebp

    movl %esp,%ebp

    andl $-16,%esp

    movl $1,%eax

    leave

    ret

  2. 编译汇编程序成机器代码

    as hello.s –o hello.o

  3. 连接机械代码成exe文件

    ld hello.o –o hello.exe

  4. 执行exe文件

    hello

    1. 示例说明
  5. 在gcc中,汇编源程序后辍名为.s,机器代码文件名为.o
  6. 代码说明

    1).section .data

.section是一个分段指示符,.data表示是数据段。全局变量存此,本程序无全局变量故为空

2).section .text,表示代码段

3) globl _start ,指示代码段的入口函数,_start代表一个符号,在汇编中符号代表一个地址,如同c的数组名、变量名、函数名一样。汇编一般要_start表示入口函数,如c语言用main函数表示程序的入口执行函数。

4) def    _start;    .scl    2;    .type    32;对入口函数_start进行说

5) pushl %ebp

movl %esp,%ebp

andl $-16,%esp

win32下的汇编程序的默认写法,表示程序地址按16的倍数对齐

6) movl $1,%eax 把1这个值赋给寄存器eax 。函数返回值通回是放在eax寄存器

7) leave

let

8)#表示行注释,相当于c的//

代表函数返回

  1. as指令说明

    as指令使用intel汇编指令示例如下:

    as hello.s –o hello.o –msyntax=intel

  2. GAS常用的工具

工具

作用

示例

ar

把对象文件进行归档,形成.a文件,相当于.lib文件

ar –crs archine.a a1.o a2.o

意思是把a1.o与a2.o归档形成文档

as

把汇编源程序编译成.o文件

 

ld

把.o程序进行连接

 

c++filt

  

gprof

对exe程序性能进行统计

gcc -o demo demo.c –pg

 

gprof demo

nlmconv

  

nm

列出一个o文件的符合

nm hello.o

结果输出汇编源程序定义的各种符号,如常量、标号、函数名

objcopy

copy与转换一个对象文件格式

如:

objcopy hello.o -O elf32-i386

如win平台的o文件格式默认为pei-i386,为了让o文件能用readelf进行分析,可以进行格式转换

objdump

显示信息从一个对象文件或exe文件

ojbdump –dS hello.exe把这个exe进行反汇编

ranlib

为一个归档文件.a生成索引

ranlib archive.a

readelf

读一个elf格式的o文件

readelf hello.o

size

得到程序四个区的大小

size msvcrt.dll

得到这个dll文件四个区的大小

strings

显示可打印的字符串

如:

strings msvcrt.dll

通过这个指令可以看到dll中包含那些函数

strip

  

windres

编译ms的资源文件

 
  评论这张
 
阅读(506)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018