iOS逆向?qū)W習(xí)筆記3 (函數(shù)的本質(zhì)上)

1. 棧

1.1 棧的概念

??棧是一種具有特殊訪問方式的存儲空間(后進(jìn)先出)趁桃。

1.2 棧中最重要的兩個(gè)寄存器

??SP寄存器:棧頂寄存器逢防,在任意時(shí)刻都會保存棧頂?shù)牡刂贰?br> ??FP寄存器:棧底寄存器(也稱為x29寄存器震捣,屬于通用寄存器直秆,在某些時(shí)刻利用它來保存棧底的地址)

??注意:ARM64中對棧的操作是16字節(jié)對齊的蔫劣,寄存器存儲空間是8字節(jié)大小的船庇,也就是128bit

1.3 棧的讀寫指令

  • 讀指令:ldr(load register)吭产、LDR 、LDP鸭轮,將內(nèi)容讀取到寄存器中臣淤。
  • 寫指令:str(store register)、STR窃爷、STP邑蒋,將寄存器其中的值存儲到內(nèi)存中

1.4 匯編練習(xí)

  • 指令
    1. sub sp, sp, #0x10 ;拉伸16個(gè)字節(jié)大小的棧空間
    2. stp x29, x30, [sp, #0x10] ;往sp所在位置向高地址方向分別存儲x29以及x30的值
  • 簡寫形式:stp x29, x30, [sp, #-0x10]! (不需要額外的棸蠢澹空間的時(shí)候可以這么寫医吊,!的意思是將[]中運(yùn)算的結(jié)果保存到sp寄存器中)。(這句匯編應(yīng)該是先寫入逮京,再拉伸椙涮茫空間)

注意:在ARM64中棧的開口方向是由高地址向低地址的,保存寄存器的值是從棧底開始存儲的造虏。

2. bl指令

  • bl指令:跳轉(zhuǎn)指令御吞,表示程序執(zhí)行到標(biāo)號處麦箍,會將下一條指令的地址保存到lr寄存器中。b代表跳轉(zhuǎn)陶珠,l代表lr(x30寄存器)挟裂。

3. ret指令

??ret指令:返回指令,類似函數(shù)中的return揍诽,讓cpu執(zhí)行l(wèi)r寄存器所指向的指令诀蓉。

**??注意:函數(shù)內(nèi)部調(diào)用函數(shù)的時(shí)候就需要保護(hù)現(xiàn)場,在ret指令調(diào)用之前暑脆,將之前存在棧中的lr寄存器的值取出來賦值給lr寄存器 **

4. 函數(shù)的參數(shù)

??在ARM64中渠啤,參數(shù)是存放在x0到x7這8個(gè)寄存器中的。

注意:如果是浮點(diǎn)數(shù)添吗,就會用浮點(diǎn)寄存器沥曹,如果超過8個(gè)參數(shù),就會使用棧傳遞參數(shù)

5. 函數(shù)的返回值

??在ARM64中碟联,一般函數(shù)的返回值是使用x0寄存器保存的妓美。

注意:如果返回值大于8個(gè)字節(jié),就會利用內(nèi)存?zhèn)鬟f返回值鲤孵。
??在函數(shù)的編寫過程中壶栋,參數(shù)一般都不應(yīng)超過8個(gè),返回值的字節(jié)大小也不應(yīng)大于8字節(jié)普监,因?yàn)闀档托?/p>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贵试,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子凯正,更是在濱河造成了極大的恐慌毙玻,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漆际,死亡現(xiàn)場離奇詭異淆珊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)奸汇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門施符,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人擂找,你說我怎么就攤上這事戳吝。” “怎么了贯涎?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵听哭,是天一觀的道長。 經(jīng)常有香客問我,道長陆盘,這世上最難降的妖魔是什么普筹? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮隘马,結(jié)果婚禮上太防,老公的妹妹穿的比我還像新娘。我一直安慰自己酸员,他們只是感情好蜒车,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幔嗦,像睡著了一般酿愧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邀泉,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天嬉挡,我揣著相機(jī)與錄音,去河邊找鬼呼渣。 笑死棘伴,一個(gè)胖子當(dāng)著我的面吹牛寞埠,可吹牛的內(nèi)容都是我干的屁置。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼仁连,長吁一口氣:“原來是場噩夢啊……” “哼蓝角!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饭冬,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤使鹅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后昌抠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體患朱,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年炊苫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了裁厅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侨艾,死狀恐怖执虹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情唠梨,我是刑警寧澤袋励,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響茬故,放射性物質(zhì)發(fā)生泄漏盖灸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一磺芭、第九天 我趴在偏房一處隱蔽的房頂上張望糠雨。 院中可真熱鬧,春花似錦徘跪、人聲如沸甘邀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽松邪。三九已至,卻和暖如春哨查,著一層夾襖步出監(jiān)牢的瞬間逗抑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工寒亥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邮府,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓溉奕,卻偏偏與公主長得像褂傀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子加勤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

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