日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

32汇编语言程序说明_Linux 汇编语言学习--编译和链接

發(fā)布時(shí)間:2025/3/8 linux 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 32汇编语言程序说明_Linux 汇编语言学习--编译和链接 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上次我們提到了匯編語(yǔ)言的兩種格式,Intel 和 AT&T 格式,今天講的是對(duì)應(yīng)兩種編譯器的一些使用。

我們知道,編譯器就是一個(gè)將一種程序語(yǔ)言翻譯成另外一種語(yǔ)言的程序。編譯的過(guò)程其實(shí)共有5個(gè)流程:詞法分析、語(yǔ)法分析、語(yǔ)義分析和中間代碼生成、優(yōu)化、目標(biāo)代碼生成。具體是怎么實(shí)現(xiàn)的,有興趣的話,可以找一本好的《編譯原理》書(shū)看一看,順便自己也嘗試寫(xiě)一個(gè)編譯器。

對(duì)于匯編語(yǔ)言呢,不同平臺(tái)不同格式都有各自不同的編譯器,也有一些可以跨平臺(tái)的編譯器。那么上次我們提到的Intel 格式和AT&T格式匯編使用的編譯器是什么呢?

Linux 中編譯Intel 格式使用 Nasm, 編譯AT&T格式使用Gas。

下面以Hello World程序做個(gè)示范,為了區(qū)分格式,我們將Intel格式的匯編代碼文件后綴名寫(xiě)為.asm,而AT&T的寫(xiě)為.s.

Intel:

$> nasm -f elf hello.asm

或者

$> nasm -f elf64 hello.asm

上面的兩條命令都會(huì)生成一個(gè)hello.o目標(biāo)文件,下面的那條命令可以對(duì)上兼容。elf64相當(dāng)于說(shuō)是說(shuō)明64位機(jī)器,elf是32位。看我們的代碼可以知道,如果寄存器中使用的rax之類的,那么一定是64位的。當(dāng)然,這個(gè)問(wèn)題都不大,不管使用那一條命令,其實(shí)都能通過(guò)。

生成.o文件之后,我們就需要用鏈接器(linker)將目標(biāo)文件鏈接起來(lái),生成可執(zhí)行文件

$> ld -m elf_i386 -o hello hello.o $> ld -o hello hello.o $> ld -o -m elf_x86_64 -o hello hello.o

上面的第1條鏈接命令對(duì)應(yīng)前面的第一條編譯命令,第2,3條是等價(jià)的,對(duì)應(yīng)前面第二條編譯命令。之前也說(shuō)了,這是一個(gè)對(duì)應(yīng)機(jī)器位數(shù)的問(wèn)題。如果混用,會(huì)出現(xiàn)不匹配問(wèn)題,看圖說(shuō)話。

情況就是這么個(gè)情況,不要問(wèn)為什么。這就跟找對(duì)象一樣,合適是很重要了。

AT&T

使用Gas編譯AT&T格式匯編。Gas 是GNU中自帶的,如果是Linux系統(tǒng)的話,基本上都自帶了,不需要再安裝。

Gas編譯起來(lái)沒(méi)有那么多花樣

$> as -o hello.o hello.s


$> ld -o hello helle.o

通也是生成了可執(zhí)行文件hello

測(cè)試一下

關(guān)于編譯和鏈接的一些參數(shù),可以通過(guò)使用 --help 參數(shù)來(lái)查看,一般來(lái)說(shuō)掌握幾個(gè)基本參數(shù)即可。

到目前來(lái)說(shuō)呢,基本的概念和幾個(gè)工具都已經(jīng)簡(jiǎn)單講完了,后面將會(huì)開(kāi)始正式的開(kāi)始我們的匯編語(yǔ)言學(xué)習(xí)。為了好看吧,將會(huì)以Intel格式來(lái)講解,期待一波吧。

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的32汇编语言程序说明_Linux 汇编语言学习--编译和链接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。