ARM64匯編學(xué)習筆記一(初始匯編)

匯編語言的種類

  • 目前討論比較多的匯編語言有:
    • 8086 匯編(8086處理器是16bit 的 CPU)
    • Win32 匯編
    • Win64 匯編
    • ARM 匯編
架構(gòu) 設(shè)備
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 等硬件結(jié)構(gòu)
  • APP/程序的執(zhí)行過程
    15193672391363.jpg
  • 硬件相關(guān)的最為重要的是 CPU 和內(nèi)存
  • 匯編中昧港,大部分指令都是和 CPU、內(nèi)存相關(guān)的

總線

CPU正面-A11處理器
CPU背面-管腳
  • 每一個 CPU 芯片都有許多管腳膨桥,這些管腳和總線相連,CPU 通過總線跟外部器件進行交互
  • 總線:一根根導(dǎo)線的集合
  • 總線的分類:
    • 地址總線-
      • 它的寬度決定了 CPU 的尋址能力
      • 8086的地址總線寬度是20唠叛,所以尋址能力是1M(2^20)
    • 數(shù)據(jù)總線
      • 它的寬度決定了 CPU 的單次數(shù)據(jù)傳送量只嚣,也就是數(shù)據(jù)傳送速度
      • 8086的數(shù)據(jù)總線寬度為16,所以單詞最大傳遞2個字節(jié)的數(shù)據(jù)
    • 控制總線
      • 它的寬度決定了 CPU 對其他器件的控制能力艺沼、能有多少種控制


內(nèi)存

各類存儲區(qū)的邏輯連接
各類存儲器的邏輯連接-物理地址對應(yīng)圖
各類存儲器的物理地址情況
  • 內(nèi)存地址空間的大小受CPU地址總線寬度的限制册舞。8086的地址總線寬度為20,可以定位2^20個不同的內(nèi)存單元(內(nèi)存地址范圍0x00000~0xFFFFF)障般,所以8086的內(nèi)存空間大小為1MB

  • 0x00000~0x9FFFF:主存儲器调鲸。可讀可寫

  • 0xA0000~0xBFFFF:向顯存中寫入數(shù)據(jù)挽荡,這些數(shù)據(jù)會被顯卡輸出到顯示器藐石。可讀可寫

  • 0xC0000~0xFFFFF:存儲各種硬件\系統(tǒng)信息定拟。只讀

數(shù)據(jù)的寬度

數(shù)學(xué)上的數(shù)字于微,是沒有大小限制的,可以無限的大青自。但在計算機中株依,由于受硬件的制約,數(shù)據(jù)都是有長度限制的(我們稱為數(shù)據(jù)寬度)性穿,超過最多寬度的數(shù)據(jù)會被丟棄勺三。

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int test() {
    int temp = 0x1ffffffff;
    return temp;
}

int main(int argc, char * argv[]) {
    printf("%x\n", test());
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

計算機中常見的數(shù)據(jù)寬度

  • 位(Bit): 1個位就是1個二進制位.0或者1
  • 字節(jié)(Byte): 1個字節(jié)由8個Bit組成(8位).內(nèi)存中的最小單元Byte.
  • 字(Word): 1個字由2個字節(jié)組成(16位),這2個字節(jié)分別稱為高字節(jié)和低字節(jié).
  • 雙字(Doubleword): 1個雙字由兩個字組成(32位)

寄存器

內(nèi)部部件之間由總線連接

  • 對程序員來說雷滚,CPU中最主要部件是寄存器需曾,可以通過改變寄存器的內(nèi)容來實現(xiàn)對CPU的控制
  • 不同的CPU,寄存器的個數(shù)、結(jié)構(gòu)是不相同的

通用寄存器

  • ARM64擁有有31個64位的通用寄存器 x0 到 x30,這些寄存器通常用來存放一般性的數(shù)據(jù)呆万,稱為通用寄存器(有時也有特定用途)
    • 那么w0 到 w28 這些是32位的. 因為64位CPU可以兼容32位.所以可以只使用64位寄存器的低32位
    • 比如 w0 就是 x0的低32位


  • 通常商源,CPU會先將內(nèi)存中的數(shù)據(jù)存儲到通用寄存器中,然后再對通用寄存器中的數(shù)據(jù)進行運算
  • 假設(shè)內(nèi)存中有塊紅色內(nèi)存空間的值是3谋减,現(xiàn)在想把它的值加1牡彻,并將結(jié)果存儲到藍色內(nèi)存空間


    • CPU首先會將紅色內(nèi)存空間的值放到X0寄存器中:mov X0,紅色內(nèi)存空間
    • 然后讓X0寄存器與1相加:add X0,1
    • 最后將值賦值給內(nèi)存空間:mov 藍色內(nèi)存空間,X0

pc寄存器(program counter)

  • 為指令指針寄存器,它指示了CPU當前要讀取指令的地址
  • 在內(nèi)存或者磁盤上出爹,指令和數(shù)據(jù)沒有任何區(qū)別庄吼,都是二進制信息
  • CPU在工作的時候把有的信息看做指令,有的信息看做數(shù)據(jù)严就,為同樣的信息賦予了不同的意義
    • 比如 1110 0000 0000 0011 0000 1000 1010 1010
    • 可以當做數(shù)據(jù) 0xE003008AA
    • 也可以當做指令 mov x0, x8
  • CPU根據(jù)什么將內(nèi)存中的信息看做指令总寻?
    • CPU將pc指向的內(nèi)存單元的內(nèi)容看做指令
    • 如果內(nèi)存中的某段內(nèi)容曾被CPU執(zhí)行過,那么它所在的內(nèi)存單元必然被pc指向過

bl指令

  • CPU從何處執(zhí)行指令是由pc中的內(nèi)容決定的梢为,我們可以通過改變pc的內(nèi)容來控制CPU執(zhí)行目標指令
  • ARM64提供了一個mov指令(傳送指令)渐行,可以用來修改大部分寄存器的值,比如
mov x0,#10铸董、mov x1,#20
  • 但是祟印,mov指令不能用于設(shè)置pc的值,ARM64沒有提供這樣的功能
  • ARM64提供了另外的指令來修改pc的值粟害,這些指令統(tǒng)稱為轉(zhuǎn)移指令蕴忆,最簡單的是bl指令
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市我磁,隨后出現(xiàn)的幾起案子孽文,更是在濱河造成了極大的恐慌,老刑警劉巖夺艰,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芋哭,死亡現(xiàn)場離奇詭異,居然都是意外死亡郁副,警方通過查閱死者的電腦和手機减牺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來存谎,“玉大人拔疚,你說我怎么就攤上這事〖燃裕” “怎么了稚失?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長恰聘。 經(jīng)常有香客問我句各,道長吸占,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任凿宾,我火速辦了婚禮矾屯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘初厚。我一直安慰自己件蚕,他們只是感情好,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布产禾。 她就那樣靜靜地躺著排作,像睡著了一般。 火紅的嫁衣襯著肌膚如雪亚情。 梳的紋絲不亂的頭發(fā)上纽绍,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機與錄音势似,去河邊找鬼拌夏。 笑死,一個胖子當著我的面吹牛履因,可吹牛的內(nèi)容都是我干的障簿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼栅迄,長吁一口氣:“原來是場噩夢啊……” “哼站故!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起毅舆,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤西篓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后憋活,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體岂津,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年悦即,在試婚紗的時候發(fā)現(xiàn)自己被綠了吮成。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡辜梳,死狀恐怖粱甫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情作瞄,我是刑警寧澤茶宵,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站宗挥,受9級特大地震影響乌庶,放射性物質(zhì)發(fā)生泄漏叶摄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一安拟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宵喂,春花似錦糠赦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至裸燎,卻和暖如春顾瞻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背德绿。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工荷荤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人移稳。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓蕴纳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親个粱。 傳聞我的和親對象是個殘疾皇子古毛,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習匯編語言》系列視頻的筆記忱屑,在此感謝他和像他一樣...
    Gibbs基閱讀 37,112評論 8 114
  • 我們在學(xué)習逆向開發(fā)之前,我們要了解一個基本的逆向原理.首先我們是逆向iOS系統(tǒng)上面的APP.那么我們知道,一個AP...
    Colin_狂奔的螞蟻閱讀 1,837評論 4 20
  • 編程語言的發(fā)展 機器語言由0和1組成 匯編語言(Assembly Language)用符號代替了0和1,比機器語言...
    阿凡提說AI閱讀 3,983評論 0 15
  • 我們在學(xué)習逆向開發(fā)之前,我們要了解一個基本的逆向原理.首先我們是逆向iOS系統(tǒng)上面的APP.那么我們知道,一個AP...
    iOS小肖閱讀 189評論 0 0
  • 組件 計算機是一種數(shù)據(jù)處理設(shè)備暇昂,它由CPU和內(nèi)存以及外部設(shè)備組成莺戒。CPU負責數(shù)據(jù)處理,內(nèi)存負責存儲急波,外部設(shè)備負責數(shù)...
    哆啦灬少A夢閱讀 1,569評論 1 2