AT T組合語言 工具及程式組成

2021-09-22 10:46:18 字數 2720 閱讀 6492

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

彙編器、聯結器、偵錯程式、編譯器 

由於我在這裡的是at&t

組合語言。所以工具下也都是

gnu下的那些。

1.1 彙編器

(as)

彙編器有非常多,masm

,nasm,gas

等,不像高階語言,儘管都叫組合語言。但不同的彙編器,其語法是存在非常大不同的。

intel

彙編的書籍到處可見,但是

at&t

的卻少之又少。但想看

linux

核心的話,還是要對

at&t

彙編熟悉才行。這或許是自己為什麼學習彙編的原因吧。說到彙編器,我們用的是

as,其可選引數有非常多。但我們用的幾個:

比方我們要彙編test.s

為ia-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     :執行

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

語句使用乙個引數——

它宣告的段的型別。如下圖所看到的。

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

2.1.2 定義段的起點

當組合語言程式被轉換成可執行檔案時,聯結器要知道指向的起點,gnu

彙編器宣告乙個預設標籤

_start,表明程式從這條指令開始。當然。也能夠使用聯結器引數

-e來定義新的起始名稱。

好,以下來總結一下我們的組合語言的基礎模板:

.section .data

《有初始值的資料放在這》

.section .bss

《未初始化的值放在這》

.section .text

.globl _start

_start:

《執行**放在這》

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

AT T組合語言 工具及程式組成

在組合語言中,用到的工具主要用以下幾個 彙編器 聯結器 偵錯程式 編譯器 因為我在這裡的是at t 組合語言,所以工具下也都是 gnu下的那些。1.1 彙編器 as 彙編器有很多,masm nasm,gas 等,不像高階語言,雖然都叫組合語言,但不同的彙編器,其語法是存在很大不同的。intel 彙編...

AT T組合語言 工具及程式組成

在組合語言中,用到的工具主要用以下幾個 彙編器 聯結器 偵錯程式 編譯器 因為我在這裡的是at t 組合語言,所以工具下也都是 gnu下的那些。1.1 彙編器 as 彙編器有很多,masm nasm,gas 等,不像高階語言,雖然都叫組合語言,但不同的彙編器,其語法是存在很大不同的。intel 彙編...

組合語言 AT T組合語言

這兩天的pwn題環境都是在linux中,採用的組合語言是 at t 格式。之前學習的是intel格式的8086彙編,今天學習了下at t組合語言。基於x86 架構的處理器所使用的彙編指令一般有兩種格式 操作intel格式at t格式 暫存器命名 push eax pushl eax 常數 立即運算元...