彙編初探(一)

前言

  做爲一個程序員在咱們的開發和學習過程當中,或多或少都接觸過彙編,那咱們想沒想過彙編是什麼,掌握彙編咱們能幹什麼呢?
簡單一點說就是把彙編語言翻譯成計算機能夠讀懂的機器語言的過程,咱們稱之爲彙編。學會彙編能夠玩工程的逆向,還能夠了解計算機的原理。在作逆向分析過程當中一個很重要的環節叫靜態分析,一個APP能夠手機上執行,是由於手機上安裝了可執行文件,它本質上是一個二進制文件,手機本質上執行的是二進制,而靜態分析是創建在二進制上面。要想分析二進制就須要瞭解彙編程序員

彙編語言的發展

  • 什麼是機器語言呢?

  它實際上是由0和1組成的機器指令:0100 0000,:0100 1000,:1111 0111 1110 0000,:1111 0111 1111 0000。彙編語言(assembly language),它是使用助記符代替機器語言。:INC EAX 經過編譯器 0100 0000,:DEC EAX 經過編譯器0100 1000,:MUL EAX 經過編譯器1111 0111 1110 0000,:DIV EAX 經過編譯器1111 0111 1111 0000。咱們平常開發的代碼在終端設備上是怎樣轉化的呢?   經過上圖能夠很直觀的看到代碼的轉化過程。咱們也應該認識到彙編語言與機器語言一一對應,每一條機器指令都有與之對應的彙編指令。彙編語言能夠經過編譯獲得機器語言機器語言能夠經過反彙編獲得彙編語言。高級語言能夠經過編譯獲得彙編語言機器語言,但彙編語言\機器語言幾乎不可能還原成高級語言。markdown

  • 彙編語言的特色

  能夠直接訪問、控制各類硬件設備,好比存儲器CPU等,能最大限度地發揮硬件的功能。目標代碼簡短,佔用內存少,執行速度快。彙編指令是機器指令的助記符,同機器指令一一對應。每一種CPU都有本身的機器指令集\彙編指令集,因此彙編語言不具有可移植性。不區分大小寫,好比mov和MOV是同樣的。   目前比較常見的彙編語言有:8086彙編Win32彙編Win64彙編ARM彙編(嵌入式、Mac、iOS ).iPhone用到的是ARM彙編,但不一樣的設備也有差別性,由於它們的CPU架構不同。
armv6 : iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch
armv7 : iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4
armv7s : iPhone5, iPhone5C, iPad4(iPad with Retina Display)
arm64 : iPhone5S 之後 iPhoneX , iPad Air, iPad mini2之後   彙編會生成不一樣的指令,不一樣CPU架構會對應不一樣的指令集。應用在手機或電腦中執行過程是怎麼樣的呢?   經過上圖咱們基本能夠摸清楚程序的執行過程。硬件相關最爲重要的是CPU。在彙編中大部分的指令都是CPU內存之間關聯。一般咱們所說的32位64位系統,區別在於在數據吞吐量上的差別,跟數據總線相關。CPU工做原理就是對外放電,32位系統CPU一次放電吞吐量位4字節,64位系統CPU一次放電吞吐量位8字節。那什麼是數據總線呢?   總線是一根根導線的集合。每個CPU芯片都有許多管腳,這些管腳和總線相連,CPU經過總線跟外部器件進行交互。總線又分爲三大類: 地址總線數據總線控制總線   地址總線有多根決定總線的寬度寬度決定了尋址的能力。在程序執行過程當中,咱們常提到一個名詞鏡像文件(image())。它實際上是可執行文件從磁盤加載內存中的一種表現形式。8086的地址總線寬度是20,因此尋址能力是1M8080的地址總線寬度是16,因此尋址能力是64K。   好了這一期的彙編咱們先探索到這裏,下一期咱們繼續研究。架構

相關文章
相關標籤/搜索