匯編(三)

1.函數(shù)的局部變量

定義一個局部變量c耍缴,斷點查看匯編中c的存儲調(diào)用

image.png

w0 存儲著10滥酥,w1存儲著20
image.png

進funcA中查看
image.png

上面的函數(shù)為葉子函數(shù)履澳,不再調(diào)用其它的函數(shù)草描,都是基于sp進行操作别瞭,沒有對x29(fp)懂算,x30(lr)進行保護只冻,因為該函數(shù)中沒有對其進行改變。

2.函數(shù)的嵌套調(diào)用

定義2個函數(shù)计技,funcA中調(diào)用sum


image.png

斷點查看


image.png

與葉子函數(shù)調(diào)用相比發(fā)現(xiàn)多了x29,x30的入棧保護
image.png

3.狀態(tài)寄存器

CPU內(nèi)部的寄存器中,有一種特殊的寄存器(對于不同的處理器,個數(shù)和結(jié)構(gòu)都可能不同).這種寄存器在ARM中,被稱為狀態(tài)寄存器就是CPSR(current program status register)寄存器
CPSR和其他寄存器不一樣,其他寄存器是用來存放數(shù)據(jù)的,都是整個寄存器具有一個含義.而CPSR寄存器是按位起作用的,也就是說,它的每一位都有專門的含義,記錄特定的信息喜德。
CPSR寄存器是32位的

狀態(tài)寄存器
  • CPSR的低8位(包括I、F垮媒、T和M[4:0])稱為控制位舍悯,程序無法修改,除非CPU運行于特權(quán)模式下,程序才能修改控制位!
  • N、Z睡雇、C萌衬、V均為條件碼標(biāo)志位。它們的內(nèi)容可被算術(shù)或邏輯運算的結(jié)果所改變它抱,并且可以決定某條指令是否被執(zhí)行!意義重大!
3.1 N(Negative)標(biāo)志

CPSR的第31位是 N秕豫,符號標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為負(fù).如果為負(fù)則N = 1,如果是非負(fù)數(shù)則N = 0观蓄。
在ARM64的指令集中,有的指令的執(zhí)行時影響狀態(tài)寄存器的,比如add\sub\or等,他們大都是運算指令(進行邏輯或算數(shù)運算)

3.2 Z(Zero)標(biāo)志

CPSR的第30位是Z混移,0標(biāo)志位。它記錄相關(guān)指令執(zhí)行后,其結(jié)果是否為0蜘腌。如果結(jié)果為0沫屡,那么Z = 1。如果結(jié)果不為0撮珠,那么Z = 0沮脖。
如果為0金矛,則為真,1表示真勺届,Z=1驶俊。
如果不為0,則為假免姿,0表示假饼酿,Z=0。

3.3 C(Carry)標(biāo)志

CPSR的第29位是C胚膊,進位標(biāo)志位故俐。一般情況下,進行無符號數(shù)的運算
加法運算:當(dāng)運算結(jié)果產(chǎn)生了進位時(無符號數(shù)溢出)紊婉,C=1药版,否則C=0。
減法運算(包括CMP):當(dāng)運算時產(chǎn)生了借位時(無符號數(shù)溢出)喻犁,C=0槽片,否則C=1。

  • 進位:我們知道肢础,當(dāng)兩個數(shù)據(jù)相加的時候还栓,有可能產(chǎn)生從最高有效位想更高位的進位。比如兩個32位數(shù)據(jù):0xaaaaaaaa + 0xaaaaaaaa,將產(chǎn)生進位传轰。由于這個進位值在32位中無法保存剩盒,我們就只是簡單的說這個進位值丟失了。其實CPU在運算的時候慨蛙,并不丟棄這個進位制勃刨,而是記錄在一個特殊的寄存器的某一位上。ARM下就用C位來記錄這個進位值股淡。比如身隐,下面的指令
mov w0,#0xaaaaaaaa;0xa 的二進制是 1010
adds w0,w0,w0唯灵; 執(zhí)行后 相當(dāng)于 1010 << 1 進位1(無符號溢出) 所以C標(biāo)記 為 1
adds w0,w0,w0贾铝; 執(zhí)行后 相當(dāng)于 0101 << 1 進位0(無符號沒溢出) 所以C標(biāo)記 為 0
adds w0,w0,w0; 重復(fù)上面操作
adds w0,w0,w0
  • 借位:當(dāng)兩個數(shù)據(jù)做減法的時候埠帕,有可能向更高位借位垢揩。再比如,兩個32位數(shù)據(jù):0x00000000 - 0x000000ff,將產(chǎn)生借位敛瓷,借位后叁巨,相當(dāng)于計算0x100000000 - 0x000000ff。得到0xffffff01 這個值呐籽。由于借了一位锋勺,所以C位 用來標(biāo)記借位蚀瘸。C = 0。比如下面指令
mov w0,#0x0
subs w0,w0,#0xff;產(chǎn)生借位C=0
subs w0,w0,#0xff;不產(chǎn)生借位C=1
subs w0,w0,#0xff;不產(chǎn)生借位C=1
3.4 V(Overflow)溢出標(biāo)志

CPSR的第28位是V庶橱,溢出標(biāo)志位贮勃。在進行有符號數(shù)運算的時候,如果超過了機器所能標(biāo)識的范圍苏章,稱為溢出

  • 正數(shù) + 正數(shù) 為負(fù)數(shù) 溢出
  • 負(fù)數(shù) + 負(fù)數(shù) 為正數(shù) 溢出
  • 負(fù)數(shù) - 正數(shù) 為負(fù)數(shù) 溢出
  • 正數(shù) + 負(fù)數(shù) 不可能溢出
3.5 CPSR練習(xí)

在main函數(shù)中用內(nèi)聯(lián)匯編寫一段匯編寂嘉,內(nèi)聯(lián)匯編可以直接打斷點


image.png

把狀態(tài)寄存器先清零,等會方便查看變化


image.png

image.png

下面2個圖是實際運行結(jié)果


image.png

image.png

4. 全局變量和常量

定義一個全局變量g枫绅,字符串常量haha


image.png

學(xué)習(xí)一下如何找到他們的內(nèi)存地址


image.png

si進入func函數(shù)中
image.png

po下結(jié)果


image.png

5. 總結(jié)

學(xué)習(xí)了函數(shù)局部變量和函數(shù)嵌套調(diào)用在匯編中的查找調(diào)用泉孩,了解了狀態(tài)寄存器的作用,還有全局變量和常量的地址查找并淋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末棵譬,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子预伺,更是在濱河造成了極大的恐慌,老刑警劉巖曼尊,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酬诀,死亡現(xiàn)場離奇詭異,居然都是意外死亡骆撇,警方通過查閱死者的電腦和手機瞒御,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神郊,“玉大人肴裙,你說我怎么就攤上這事∮咳椋” “怎么了蜻懦?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夕晓。 經(jīng)常有香客問我宛乃,道長,這世上最難降的妖魔是什么蒸辆? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任征炼,我火速辦了婚禮,結(jié)果婚禮上躬贡,老公的妹妹穿的比我還像新娘谆奥。我一直安慰自己,他們只是感情好拂玻,可當(dāng)我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布酸些。 她就那樣靜靜地躺著宰译,像睡著了一般。 火紅的嫁衣襯著肌膚如雪擂仍。 梳的紋絲不亂的頭發(fā)上囤屹,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音逢渔,去河邊找鬼肋坚。 笑死,一個胖子當(dāng)著我的面吹牛肃廓,可吹牛的內(nèi)容都是我干的智厌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盲赊,長吁一口氣:“原來是場噩夢啊……” “哼铣鹏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起哀蘑,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤诚卸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绘迁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體合溺,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年缀台,在試婚紗的時候發(fā)現(xiàn)自己被綠了棠赛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡膛腐,死狀恐怖睛约,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哲身,我是刑警寧澤辩涝,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站勘天,受9級特大地震影響膀值,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜误辑,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一沧踏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巾钉,春花似錦翘狱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阱高。三九已至,卻和暖如春茬缩,著一層夾襖步出監(jiān)牢的瞬間赤惊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工凰锡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留未舟,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓掂为,卻偏偏與公主長得像裕膀,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勇哗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,619評論 2 354

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