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

1.開發工具

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

彙編器、鏈接器、調試器、編譯器 編程

因爲我在這裏的是AT&T彙編語言。因此工具下也都是gnu下的那些。ubuntu



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)spa

咱們選擇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:

<執行代碼放在這>

 今天就寫到這吧,明天用詳細實例來講一下今天所說的工具的使用方法。

相關文章
相關標籤/搜索