匯編(一)- 前置技能點

學(xué)習(xí)匯編筑累,可以應(yīng)用在逆向果复、外掛等用途材诽,能幫助我們對計算機運行程序本質(zhì)認(rèn)識得更清楚

前置知識

32位系統(tǒng)與64位系統(tǒng)區(qū)別

  • 32位操作系統(tǒng)颤枪,是用32個0汗捡、1來表示1個內(nèi)存單元(字節(jié))地址,即內(nèi)存地址范圍用16進(jìn)制表示為0x00000000 ~ 0xEEEEEEEE,共0xFFFFFFFF個字節(jié)扇住,約等于4GB。
image
  • 64位操作系統(tǒng)锄贼,是用64個0女阀、1來表示1個內(nèi)存單元(字節(jié))地址宅荤,即內(nèi)存地址范圍用16進(jìn)制表示為0x00000000 00000000 ~ 0xEEEEEEEE EEEEEEEE,共0xFFFFFFFF FFFFFFFF個字節(jié)浸策,約等于16EB(16000PB)。目前電腦的地址總線數(shù)量不到64位惫确,即使有這么大的內(nèi)存條也不能完全利用。

虛擬內(nèi)存

操作系統(tǒng)會將內(nèi)存中的物理內(nèi)存映射為虛擬內(nèi)存蚯舱。比如變量a的內(nèi)存地址為0x10000001改化,該地址值為虛擬內(nèi)存地址值。

軟件運行本質(zhì)

image

大小端模式

  • 大端模式枉昏,是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的低地址中兄裂,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的高地址中,這樣的存儲模式有點兒類似于把數(shù)據(jù)當(dāng)作字符串順序處理:地址由小向大增加懦窘,而數(shù)據(jù)從高位往低位放稚配;這和我們的閱讀習(xí)慣一致。
  • 小端模式道川,是指數(shù)據(jù)的高字節(jié)保存在內(nèi)存的高地址中冒萄,而數(shù)據(jù)的低字節(jié)保存在內(nèi)存的低地址中,這種存儲模式將地址的高低和數(shù)據(jù)位權(quán)有效地結(jié)合起來尊流,高地址部分權(quán)值高,低地址部分權(quán)值低逻住。
image
image

內(nèi)存劃分

  • 內(nèi)核區(qū)瞎访,操作系統(tǒng)占用部分內(nèi)存
  • 代碼段,編譯后的代碼存放的區(qū)域
  • 數(shù)據(jù)段扒秸,全局變量、靜態(tài)變量存放的地方

棧平衡

x86 32位棧指針寄存器寄存器:esp写烤、ebp渔伯,對應(yīng)的64位棧指針寄存器寄存器為 rsp、rbp锣吼。函數(shù)調(diào)用完成時,esp古徒、ebp會恢復(fù)到調(diào)用前的位置读恃,實現(xiàn)棧平衡。

  • Intel 匯編格式
    • esp 棧頂指針
    • ebp 當(dāng)前調(diào)用函數(shù)的棧底指針
  • AT&T 匯編格式
    • esp 調(diào)用當(dāng)前函數(shù)的函數(shù)的棧頂指針
    • ebp 調(diào)用當(dāng)前函數(shù)的函數(shù)的棧底指針

編程語言的發(fā)展

image

匯編

匯編的種類

image
  • x86 AT&T 和 Intel 匯編書寫格式區(qū)別
image
  • x64 AT&T 和 Intel 匯編書寫格式區(qū)別


    image

寄存器

不同架構(gòu)寄存器是不一樣的,1個寄存器的大小就是當(dāng)前系統(tǒng)1個指針的大小萨驶,32位系統(tǒng)4個字節(jié)艇肴,64位系統(tǒng)8個字節(jié)。

  • x64架構(gòu)寄存器再悼,兼容x86


    image
image
  • arm64 架構(gòu)寄存器
    • 通?寄存器

      64bit的:x0 ~ x28

      32bit的:w0 ~ w28(屬于x0 ~ x28的低32bit)

      x0 ~ x7通常拿來存放函數(shù)的參數(shù)冲九,更多的參數(shù)使?堆棧來傳遞

      x0通常拿來存放函數(shù)的返回值

    • 程序計數(shù)器

      pc(Program Counter)

      記錄CPU當(dāng)前指令的是哪?條指令

      存儲著當(dāng)前CPU正在執(zhí)?的指令的地址

      類似于8086匯編的ip寄存器

    • 堆棧指針

      sp(Stack Pointer)

      fp(Frame Pointer),也就是x29

    • 鏈接寄存器

      lr(Link Register)咖刃,也就是x30
      存儲著函數(shù)的返回地址

    • 程序狀態(tài)寄存器

      cpsr(Current Program Status Register)

      spsr(Saved Program Status Register),異常狀態(tài)下使?

image

x64 Intel匯編指令

權(quán)威參考:Intel白皮書

image
image

x64 AT&T 匯編指令

指令與x64 Intel匯編指令一致,只不過書寫格式有所差異

arm64 匯編指令

官方文檔:Arm? Architecture Reference Manual Armv8, for Armv8-A architecture profile

  • mov
  • ret
    • 函數(shù)返回
    • 將lr(x30)寄存器的值賦值給pc寄存器
  • add
  • sub
  • cmp
    • 將2個寄存器相減
    • 相減的結(jié)果會影響cpsr寄存器的標(biāo)志位
  • b
    • 跳轉(zhuǎn)指令
    • 可以帶條件跳轉(zhuǎn)刨肃,?般跟cmp配合使?
  • bl
    • 帶返回的跳轉(zhuǎn)指令
    • 執(zhí)?的操作
      • 將下?條指令的地址存儲到lr(x30)寄存器中
      • 跳轉(zhuǎn)到標(biāo)記處開始執(zhí)?代碼
  • 條件域
    • EQ:equal箩帚,相等
    • NE:not equal,不相等
    • GT:great than紧帕,?于
    • GE:greate equal,?于等于
    • LT:less than愈案,?于
    • LE:less equal鹅搪,?于等于
  • 內(nèi)存操作
    • load,從內(nèi)存中讀取數(shù)據(jù)
    • ldr丽柿、ldur
    • ldp(p是pair的簡稱)
  • store,往內(nèi)存中寫?數(shù)據(jù)
    • str馁筐、stur
    • stp
  • 零寄存器坠非,??存儲的值是0
    • wzr(32bit,Word Zero Register)
    • xzr(64bit)

參考資料

  1. MJ教你玩匯編
  2. 30小時快速精通C++和外掛實戰(zhàn)
  3. 從入門到精通Swift編程
  4. APP逆向?qū)崙?zhàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舱卡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌矫钓,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赵辕,死亡現(xiàn)場離奇詭異概龄,居然都是意外死亡,警方通過查閱死者的電腦和手機私杜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門衰粹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铝耻,你說我怎么就攤上這事誊爹∑白剑” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵椎镣,是天一觀的道長兽赁。 經(jīng)常有香客問我状答,道長刀崖,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任馆截,我火速辦了婚禮蜂莉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窖张。我一直安慰自己蚁滋,他們只是感情好赘淮,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布睦霎。 她就那樣靜靜地躺著,像睡著了一般副女。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上襟齿,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天枕赵,我揣著相機與錄音,去河邊找鬼开皿。 笑死篮昧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懊昨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼嫉你,長吁一口氣:“原來是場噩夢啊……” “哼躏惋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起距误,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤扁位,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后域仇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡闰集,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年武鲁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沐鼠。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡叹谁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出憔涉,到底是詐尸還是另有隱情析苫,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布国旷,位于F島的核電站,受9級特大地震影響跪但,放射性物質(zhì)發(fā)生泄漏峦萎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一涂身、第九天 我趴在偏房一處隱蔽的房頂上張望搓蚪。 院中可真熱鬧蛤售,春花似錦妒潭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宇姚。三九已至夫凸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夭拌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工蒜绽, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桶现,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓吏夯,卻偏偏與公主長得像即横,于是被迫代替她去往敵國和親噪生。 傳聞我的和親對象是個殘疾皇子东囚,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345