1. 程式人生 > >彙編學習從入門到精通

彙編學習從入門到精通


公元1999年的炎熱夏季,我捧起我哥留在家的清華黃皮本《IBM-PC組合語言程式設計》,苦讀。一個星期後我那脆弱的小心靈如玻璃般碎裂了,為了彌補傷痛我哭爹求媽弄了8k大洋配了臺當時算是主流的PC,要知道那是64M記憶體!8.4G硬碟啊!還有傳說中的Celeon 300A CPU。不過很可惜的是在當時那32k小貓當道的時代,沒有寬頻網路,沒有軟體,沒有資料,沒有論壇,理所當然我對偉大的電腦科學體系的第一步探索就此夭折,此時陪伴我的是那些盜版光碟中的遊戲,把CRACK_XXX檔案從光碟複製到硬碟成了時常的工作,偶爾看到光碟中的nfo檔案,心裡也閃過一絲對破解的憧憬。

上了大學後有網可用了,慢慢地接觸到了一些黑客入侵的知識,想當黑客是每一個充滿好奇的小青年的神聖願望,整天看這看那,偷偷改了下別人的網頁就歡喜得好像第一次偷到雞的黃鼠狼。

大一開設的彙編教材就是那不知版了多少次的《IBM-PC組合語言程式設計》,憑著之前的那星期苦讀,考試混了個80分。可惜當時頭腦發熱,大學60分萬歲思想無疑更為主流,現在想想真是可惜了寶貴的學習時間。

不知不覺快畢業了,這時手頭上的《黑客防線》,《黑客X檔案》積了一大摞,整天注來注去的也厭煩了,校園網上的肉雞一打一打更不知道拿來幹什麼。這時興趣自然轉向了crack,看著雜誌上天書般的彙編程式碼,望望手頭還算嶄新的彙編課本,嘆了口氣,重新學那已經忘光了的組合語言吧。咬牙再咬牙,看完定址方式那章後我還是認輸,不認不行啊,頭快裂了,第三次努力終告失敗。雖然此時也可以爆破一些簡單的軟體,雖然也知道搞破解不需要很多的彙編知識,但我還是固執地希望能學好這門基礎中的基礎課程。

畢業了,進入社會了,找工作,上班,換工作成了主流旋律,每天精疲力盡的哪有時間呢?在最初的中國移動到考公務員再到深圳再到家裡希望的金融機構,一系列的曲折失敗等待耗光了我的熱情,我失業了,賦閒在家無所事事,唯一陪伴我的是那些雜誌,課本,以及過時的第二臺電腦。我不想工作,我對找工作有一種恐懼,我靠酒精麻醉自己,頹廢一段日子後也覺得生活太過無聊了,努力看書考了個CCNA想出去,結果還是被現實的就業環境所打敗。三年時間,一無所獲。

再之後來到女朋友處陪伴她度過剛畢業踏入社會工作的適應時期,這段時間隨便找了個電腦技術工作,每月賺那麼個幾百塊做生活費。不過這半年讓我收穫比較大的就是時間充裕,接觸到了不少新東西,我下定決心要把彙編學好,這時我在網上看到了別人推薦的王爽《組合語言》,沒抱什麼希望在噹噹網購了人生中的第一次物,19塊6毛,我記得很清楚,呵呵。

廢話終於完了,感謝各位能看到這裡,下面進入正題吧。


16位彙編

對於一個彙編初學者,首先必看的就是王爽老師的這本《組合語言》,雖然它不是很完整,雖然它有一些錯漏,雖然它需要一些前置知識(詳見書籍前言部分,前言一定要仔細看!),但是王爽老師獨特的教學理念構造了這本循序漸進的書,我們從中可以拋開對組合語言的畏懼心態,一步一步的深入進去,更可喜的是在這本書裡我們可以學到寶貴的底層程式設計意識和思想,這對於初學者來說是最為重要的,掌握了意識思想,進一步學習下去也不會再艱難。大家學習的時候一定要嚴格按照“前言”的要求去做,這樣才能有最好的效果。


半個月,就半個月,我已經看完了書,我可以自信地宣佈:我掌握組合語言了。雖然比較基礎,但想想我那六年半時間,想想我那幾次痛苦的嘗試,心中無端生出一絲怨恨,為什麼當年沒有這本書呢,否則我的成就絕不會是現在這樣。我的學習過程是先看完一遍書,做了一些習題(當時沒電腦上機操作),現在有了新的電腦了,便重新看一遍,把所有的上機操作和程式設計練習都完成了(除了最後的磁碟操作外)。

好書推薦:
1.《80x86組合語言程式設計教程》楊季文編著,清華黑皮本。本書可以當作進一步深入學習的教材。

2.《The Art of Assembly Language》 [英文版],經典著作。

32位彙編

雖然上面學到的知識已經可以應付大學要求,但是16位彙編始終還是落後於時代了,所以我們要學習32位彙編,這裡首推的是《Intel組合語言程式設計(第4版)》,可以這樣說,有了這本書,你就可以不必看別的32位彙編教材了。不過這本書的內容比較壓縮,資訊量大,需要時常翻閱複習。本書適合初學者及從16位轉向32位彙編的人們。本書光碟中帶有例子程式和作者Kip Irvine寫的幾個連結庫,極大地簡化了一些煩瑣的基本操作,同時附帶的Masm 6.15和編譯連結批處理程式也可以用在王爽老師的《組合語言》學習裡,不過我建議不要安裝光盤裡的TextPad來編寫原始碼,個人推薦使用EditPlus。
認真學完這本書,應該可以對付一般的破解工作了,起碼我是能進行一般的演算法分析推出註冊碼咯。

好書推薦:

80x86保護模式系列教程 [中文版] 作者:李彥昌。本書可以可以當作進一步深入學習的教材。


64位彙編

雖然現在我們的系統主要還是WinNT系列,但是64位的CPU已經普及市場,64位的作業系統Vista也在不少電腦裡安家落戶,64位組合語言學習不再是前沿研究。可惜我手頭上的資料太少,無法作進一步介紹,各位高手看到這裡還請指點。

相關資料:《Intel 64位CPU指令集及程式設計方法》電子文件。


Win32彙編

單純的彙編似乎除了在底層開發,嵌入式開發以及高階語言內嵌彙編外沒有多少地方使用了。為了在實際應用中更大地發揮,我們必須學習Win32彙編。這方面的資料比較少,國內的當然就是羅雲彬的《Windows環境下32位組合語言程式設計 第二版》了。hoho,大部頭著作啊,可以當成防身行暴武器哦。

好書推薦:
1.
《Iczelion的Win32彙編教程》,網路上最初的系統Win32教程,羅雲彬那書大部分內容都是從裡面編著出來的,呵呵。

2.《Kernel Mode Drivers教程中文版》,Four-F的驅動開發教程,不論開不開發驅動還是得看看。

如果你已經精通上面羅列的東西,覺得有點不勝寒了,建議還是進行一下流行的哲學研究吧。

好書推薦:
1.
朱邦復的《組合語言之藝術》,作者的經驗可以讓我們的效率變得更高。

2.
《組合語言與禪-Zen Of Assembly Language》,我還沒看,哪位有空慢慢研究吧。

個人建議,雖然上面的書籍都能找到電子書,但是我認為上面列出的主要的三本書最好還是買紙質實體書吧,主要便於閱讀和翻查,而且這麼好的書,你能不支援一下作者嗎?正版系統買不起而已,正版書籍我們還是扛得住的,小小一百幾十塊錢,少抽幾包煙就夠了。況且實體書讀起來的感覺就是比電子書要好。如果您更喜歡閱讀電子版本,那麼當這段是廢話略過也罷。

學習難免遇到一時難於解決的問題,網路交流也是必須的,介紹一下我認為不錯的幾個網站:


總結

學習彙編或許不容易,而且很枯燥,但是作為電腦科學體系中的重要基礎,掌握彙編除了進行破解外還有許多優點,最簡單地說,這麼底層這麼枯燥這麼難的你都能學好,那些高階的人性化的還在話下嗎?希望本文能給廣大彙編學習者一些幫助,謝謝~