zoukankan      html  css  js  c++  java
  • AT&T汇编语言——工具及程序组成

    1.开发工具

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

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

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



    1.1 汇编器(as)

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

    比方我们要汇编test.sia-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:
    
    <执行代码放在这>
    

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


  • 相关阅读:
    vue-router过渡动画
    vue-router重定向
    vue-router url传值
    vue-router多个组件模板放入同一个页面中
    vue-router参数
    vue-router子路由
    vue-router入门
    easyui中parser的简单用法
    webpost中常用的ContentType
    ASP.NET MVC 表单提交多层子级实体集合数据到控制器中
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5420812.html
Copyright © 2011-2022 走看看