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