天天看點

AT&T彙編語言——工具及程式組成

在彙編語言中,用到的工具主要用下面幾個:

彙編器、連接配接器、調試器、編譯器 

由于我在這裡的是AT&T彙編語言。是以工具下也都是gnu下的那些。

1.1 彙編器(as)

彙編器有非常多,masm,nasm,gas等,不像進階語言,盡管都叫彙編語言。但不同的彙編器,其文法是存在非常大不同的。Intel彙編的書籍到處可見,但是AT&T的卻少之又少。但想看Linux核心的話,還是要對AT&T彙編熟悉才行。這或許是自己為什麼學習彙編的原因吧。說到彙編器,我們用的是as,其可選參數有非常多。但我們用的幾個:

比方我們要彙編test.s為ia-32平台的test.o,

這裡僅僅用到了兩個參數--32和-o 

--32:是指定為ia-32平台代碼,

-o :後接目标檔案

 1.2 連接配接器(ld)

我們選擇ld.用到的參數主要有下面幾個:

-m elf_i386 :将目标代碼連接配接成elf_i386格式(即32位平台下的代碼)

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位代碼 

事實上,單純用彙編來開發的程式已經非常少了。

我學習這個。主要目的有兩個:

1.看懂Linux核心中的代碼

2.看懂C/C++等程式生成的彙編代碼 

是以。我更希望所用的彙編格式能直接與C語言連結起來。

2.1 彙程式設計式組成 

彙編語言由定義好的段組成,每一個段都有不同的目的。

三個經常使用的段例如以下:

資料段(.section .data)

    聲明帶有初始值的資料元素,用作彙編 語言程式中的變量

bss段 (.section .bss請問中文該怎樣翻譯?)

    用途彙編語言的緩沖區

文本段 (.section .text)

    存放代碼

2.1.1 定義段的方法

GNU彙編器使用.section指令語句聲明段。.section語句使用一個參數——它聲明的段的類型。如下圖所看到的。

這将是我們以後要使用的布局 。

AT&T彙編語言——工具及程式組成

2.1.2 定義段的起點

當彙編語言程式被轉換成可運作檔案時,連接配接器要知道指向的起點,gnu彙編器聲明一個預設标簽_start,表明程式從這條指令開始。當然。也能夠使用連接配接器參數-e來定義新的起始名稱。

 好,以下來總結一下我們的彙編語言的基礎模闆:

 今天就寫到這吧,明天用詳細執行個體來說一下今天所說的工具的使用方法。

本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5420812.html,如需轉載請自行聯系原作者