如何正確學(xué)習(xí)匯編語言?
網(wǎng)友解答: 匯編語言本身很簡單,常用指令沒幾個,語法規(guī)則也不多,看幾個小時資料似乎就明白了,但其實不然。匯編的背后是體系結(jié)構(gòu),是程序設(shè)計拋開各種高層形態(tài)的最根本,最本質(zhì)的解釋。本人從業(yè)多
匯編語言本身很簡單,常用指令沒幾個,語法規(guī)則也不多,看幾個小時資料似乎就明白了,但其實不然。匯編的背后是體系結(jié)構(gòu),是程序設(shè)計拋開各種高層形態(tài)的最根本,最本質(zhì)的解釋。
本人從業(yè)多年,除了跟我一樣搞過很久安全的同學(xué),其余的沒有一個我認(rèn)為算是精通匯編。而我是怎么掌握匯編的呢 ?
1 早年用匯編手寫病毒。比如處理指令重定位,是真的用匯編計算指令地址,push push call 實現(xiàn)函數(shù)調(diào)用。
2 長期病毒木馬2進制分析。分析明白各種 malware 的原理,實現(xiàn)查殺防。個別病毒,需要實現(xiàn)修復(fù)。
3 漏洞挖掘。fuzzer 發(fā)現(xiàn)漏洞,匯編級詳細(xì)分析,exploit 編寫,武器化利用,一條龍。
4 各種逆向分析。好的東西沒有代碼,IDA 里看就是了。
5 跟debuger 做朋友。從來看不上print 方式的bug定位。所有問題在調(diào)試器里分析明白,絕不靠猜。
6 編譯器后端研究。什么指令選擇,指令調(diào)度,寄存器分配,全都研究一遍。
7 底層開發(fā),操作系統(tǒng),設(shè)備驅(qū)動,虛擬化都走上一遍。X86很熟? ARM學(xué)一遍做對比。
歷經(jīng)這么多,終于敢說學(xué)明白匯編了。
推薦如下的文檔,很基礎(chǔ)又相對全面的介紹了很多計算機常見問題在匯編層面的解釋。
《Introduction to Computer Organization with x86-64 Assembly Language & GNU/Linux》
以上,希望對樓主有幫助
網(wǎng)友解答:本人從上世紀(jì)80年代就開始從事軟硬件的編程,特別是經(jīng)歷了PC匯編和單片機匯編。
目前PC匯編肯定沒人再搞了,因為在DOS時代,PC匯編(實際多用宏匯編)還大有用途,但在windows時代后,匯編就已經(jīng)退出了舞臺,只有反匯編搞逆向的人才使用和學(xué)習(xí)匯編和反匯編。
在單片機應(yīng)用中,隨著資源的擴大,像ARM芯片用匯編幾乎不可能。
故在嵌入式領(lǐng)域,主要在小芯片的MCU上使用匯編,例如MVS51系列,PIC系列、AVR系列和DSP系列等。
當(dāng)然也有搞各類匯編的,實際他們也是在搞反匯編,即搞逆向工程。
所以在這個年代想學(xué)習(xí)匯編的都是有故事的人……至少是聽過故事的人!
本人精通51匯編和反匯編,如果需要,可以在網(wǎng)上搜索菜農(nóng)的文章和帖子。