學習匯編語言有什么好處?
網(wǎng)友解答: 小秘書邀請我來答這個題,不過我沒有真正系統(tǒng)地學過匯編,但正是因為我沒怎么學過,所以我在網(wǎng)絡安全工作中也深受不懂匯編的苦處,就從我的苦處了解一下學習匯編的好處吧。一、不能第一時
小秘書邀請我來答這個題,不過我沒有真正系統(tǒng)地學過匯編,但正是因為我沒怎么學過,所以我在網(wǎng)絡安全工作中也深受不懂匯編的苦處,就從我的苦處了解一下學習匯編的好處吧。
一、不能第一時間分析和挖掘出二進制漏洞
舉個例子,CVE-2018-4878的0日漏洞出現(xiàn)時,雖然網(wǎng)上有很多樣本,但我只是能看個大概,根本看不懂一些高手的分析流程,舉個例子如下圖。
所以我要利用此漏洞時,只能等待別人的寫的生成器了,生成的poc樣本不免殺我也是毫無辦法,看這些匯編代碼真是像文盲看書一樣。
二、不能自己破解一些軟件來使用
這個不要和我扯上版權、知識收費等字眼。從事網(wǎng)絡安全工作中的人都知道,一些好用的必備的很多軟件基本都收費的。像burpsuite、Acunetix Web Vulnerability Scanner等等。如果自己不會破解,就要到處上網(wǎng)找破解版了,而且還很擔心破解版里邊有沒有后門,擔心黑吃黑的問題。
三、自己寫的軟件,很可能不是最佳的
自己寫的軟件,遇到性能優(yōu)化、軟件崩潰,很可能找不到真正的原因,這時后匯編很可能是你最后一根稻草了。另外,學習了匯編后,對學習c、c++之類的高級語言,會加深很多理解的。據(jù)說很多匯編高手,看到匯編代碼,腦子里已經(jīng)有c語言的映射圖了。還有呀,像下圖這樣的東西:
我們不懂匯編的只能重啟了,匯編高手估計拿起ollydbg就找到真正的原因了。
應當這樣講,從事網(wǎng)絡安全工作不一定要會匯編,但是不學不精通匯編,是成不了真正的頂尖高手的。
網(wǎng)友解答:匯編作為一個古老的語言,除了特定領域比如嵌入式開發(fā)的boot loader部分以及做逆向及破解工程方面外,實際上基本上很少能接觸的到。但是蟲蟲還是強烈建議所有搞CS和IT的同學一要學一些匯編知識,為什么呢?
理解計算機體系結構匯編可以讓人你真正理解計算機體系結構,讓你知道程序是怎么被硬件執(zhí)行的?
內(nèi)存是怎么用的,cpu怎么計算的,為什么你計算機的“1+1”就解決了我們現(xiàn)實中這么多的問題。
計算機一個典型的體系結構如下:
包括了cpu ,RAM內(nèi)存、總線,其他組件,所有這些怎么和CPU打交道的呢?
其實上很簡單,cpu只管從內(nèi)存的特定地址去數(shù)據(jù)(指令)執(zhí)行,然后返回給特定的地址,其他硬件也是存取特定地址的內(nèi)存地址。
CPU都有特定的幾個存儲單元,叫寄存器(指令放進來,執(zhí)行,然后還下一個指令),比如CS、DS、SS、ES、IP等,其中CS和IP是最重要的兩個寄存器,CS:IP的地址表示的是當前CPU處理的指令。比如下面就是一個cpu執(zhí)行的實例:
總之,CPU執(zhí)行程序就是CS:IP給他喂什么內(nèi)容他就執(zhí)行什么內(nèi)容,其他的他一律不管。
如何學習匯編語言蟲蟲建議的是不必要深入,起碼的有知道,了解,比如上面提到那些執(zhí)行過程,當然還有內(nèi)存管理,學完了你就真正知道指針啊、棧啊、堆啊這些是怎么回事。
學習匯編語言,買一本書王爽老師的《匯編語言》,耐心地讀下去,讀懂就行了,一般沒必要會用,會精通。
匯編能力層級:最后附帶一個別人總結的匯編能力,如果有心對它做深造的可以研究下:
另外還有一本書,在學了王爽書以后,可以做為進階用的。推薦《Assembly Language for x86 Processors 6th Edition》