linux下如何學習彙編語言?

日常生活在linux環境下,想深入了解底層,又不知該怎麼做,需要買個開發板之類的么


正好我最近也在看。linux 下學習彙編既不需要開發板,也不需要模擬器。甚至不需要額外安裝開發工具,自帶的 gcc + gdb 就可以。 gcc -S hello.c 生成 hello.c 的彙編,可以看看默認生成的代碼。然後可以自己寫彙編,也就是 gcc 背後的 gas 彙編,可以使用 as + ld 或是 gcc 命令編譯(彙編)運行。 gas 彙編是 ATT 風格的彙編,和 Intel 風格不一樣,一般認為 gas 的風格更詭異(不過淫者見淫,智者見智)。

除了使用 gcc/gas 之外,還可以使用跨平台的 nasm 或是 yasm ,這就需要下載安裝了, 不過很簡單(直接解壓,然後加 PATH; 或是 ./configure + make + make install 源碼安裝)。

可以使用 gdb 和 objdump 命令用來調試。

有一本(吹)牛逼的書叫:深入理解計算機系統, 上面有對計算機的原理進行的比較透徹的分析,可以看看。

對於學習彙編感覺這些東西就夠了,至於要 do action ,那就不在我的能力範圍內了 ...


學校裡面教彙編都是用模擬器的,而且教的也是一種精簡版的彙編方便學習。說實話除非你是真的致力於這麼低層的開發,否則通過模擬器學一下基本的原理就好了,其他的都是大同小異。除了硬體底層開發人員,沒人會用彙編寫程序的,簡直就是自虐啊。


學gcc的att彙編,


我這兩天就在看 programming from the ground up這本書 是linux gas att語法的

然後你需要個32位linux發行板和qemu

裡面裝個binutils就可以開工了 當然如果你不是用vi需要裝下其他編輯器


搜索bomblab和bufferlab(今年新版叫attacklab),這是CSAPP的兩個作業…做完了就懂個框架了…


不需要開發板,用文本編輯,nasm/yasm+gcc(ATT用as)就可以搞定,不過推薦使用intel語法,我現在兩種語法都在學,感覺ATT語法太反人類了。

盡量直接用64位吧,畢竟32位是多少年前的技術了,中文教材基本32位甚至還有16位的,可以參考英文教材,就那麼幾個詞,理解起來不會很難。


跟Windows下一樣


推薦閱讀:

Windows 環境下為什麼沒有免費的 PDF 編輯軟體?
Cent OS6裝gcc-4.8和php-7真很tough嗎?
遷移到 Linux:磁碟、文件、和文件系統
linux下的find文件查找命令與grep文件內容查找命令
fork如何實現執行一次返回兩個值的?

TAG:編程 | Linux | 彙編語言 |