吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Arm64程序調(diào)用通用寄存器的使用方法

麥辣雞腿堡 ? 來源:人人極客社區(qū) ? 作者:業(yè)余程序員plus ? 2023-07-28 11:28 ? 次閱讀

下面是Arm64程序調(diào)用標(biāo)準(zhǔn)規(guī)定的通用寄存器的使用方法。

參數(shù)寄存器(X0-X7) 函數(shù)參數(shù)數(shù)量小于等于8個(gè)時(shí),使用X0-X7傳遞,大于8個(gè)時(shí),多余的使用棧傳遞,函數(shù)返回時(shí)返回值保存在X0中。

調(diào)用者保存的臨時(shí)寄存器(X9-X15)調(diào)用者若使用到了X9-X15寄存器,在調(diào)用子函數(shù)之前,需要將X9-X15寄存器保存到自己的棧中,子函數(shù)使用這些寄存器的時(shí)候不需要保存和恢復(fù)。

被調(diào)用者保存的寄存器(X19-X29) 被調(diào)用者若使用到這些寄存器,需要將其保存到自己的棧中,返回時(shí)從棧中恢復(fù)。

特殊用途的寄存器

X8是間接結(jié)果寄存器。用于傳遞間接結(jié)果的地址位置,例如,函數(shù)返回一個(gè)大結(jié)構(gòu)。

X16-X17過程內(nèi)調(diào)用暫存寄存器。。

X18平臺(tái)寄存器。

X29是棧幀(FP)寄存器。保存了調(diào)用函數(shù)的棧幀地址。

X30保存了返回地址(LR)。函數(shù)返回后跳轉(zhuǎn)到該地址處運(yùn)行。

圖片

實(shí)例下圖是內(nèi)核Oops時(shí)打印出的信息。第一張圖片是寄存器信息,pc寄存器和sp寄存器對(duì)棧回溯有重要作用。第二張圖是內(nèi)核線程irq/231-dwc3棧數(shù)據(jù)的二進(jìn)制轉(zhuǎn)儲(chǔ),棧回溯就是在這些二進(jìn)制數(shù)據(jù)中找到棧幀,從而找到調(diào)用的函數(shù)地址。

圖片圖片

下圖是內(nèi)核棧回溯的結(jié)果,發(fā)生異常函數(shù)的地址保存在異常棧中,不在內(nèi)核線程irq/231-dwc3棧中。

圖片

發(fā)生異常的函數(shù)可以根據(jù)pc寄存器得到,該函數(shù)是棧回溯的第一個(gè)函數(shù)。sp寄存器指向了第一個(gè)棧幀中的FP1寄存器,即0xffffffc0ee823b80地址,F(xiàn)P1向高地址偏移8字節(jié)得到LR1寄存器,即0xffffff80087369e4地址,該地址位于dwc3_ep0_stall_and_restart函數(shù)內(nèi),該函數(shù)是棧回溯的第二個(gè)函數(shù)。FP1指向了第二個(gè)棧幀的FP2,根據(jù)棧幀找到LR2,依次類推。所有的棧幀最終如下圖所示,總共找到7個(gè)棧幀,因此irq/231-dwc3內(nèi)核線程發(fā)生異常時(shí)總共有8個(gè)函數(shù)調(diào)用,和內(nèi)核輸出的函數(shù)調(diào)用關(guān)系一致。需要注意的是,代碼里調(diào)用了該函數(shù),但在棧回溯中沒有找到符號(hào),肯定是編譯器優(yōu)化,將該函數(shù)內(nèi)聯(lián)了,是否內(nèi)聯(lián)可以通過反匯編確認(rèn)。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210389
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3795

    瀏覽量

    81406
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    介紹一種利用Arm64架構(gòu)的System counter來實(shí)現(xiàn)提供TSC的方法

    了不小的挑戰(zhàn)。為此,本文分享Arm64架構(gòu)下如何獲取TSC的方法,以方便大家移植使用。首先,System counter是Arm64下獨(dú)立于CPU core的計(jì)數(shù),在系統(tǒng)上電時(shí),會(huì)給
    發(fā)表于 06-02 17:12

    淺析openat系統(tǒng)調(diào)用arm64下的實(shí)現(xiàn)及使用原理

    open_test --static//反匯編objdump -D open_test > open_arm_asmopen_arm_asm可以看到將寄存器x8設(shè)置為系統(tǒng)調(diào)用號(hào)0x38
    發(fā)表于 06-02 17:48

    ARM寄存器詳解

    ARM有37個(gè)寄存器,其中31個(gè)通用寄存器,6個(gè)狀態(tài)寄存器。   這里尤其要注意區(qū)別的是ARM
    發(fā)表于 07-10 10:04 ?2978次閱讀

    arm程序狀態(tài)寄存器訪問指令

    arm程序狀態(tài)寄存器訪問指令
    發(fā)表于 01-04 13:11 ?0次下載

    IA64 應(yīng)用程序寄存器

    IA64 應(yīng)用程序寄存器
    發(fā)表于 01-04 13:11 ?0次下載

    ARM寄存器學(xué)習(xí)總結(jié)

    ARM寄存器學(xué)習(xí)總結(jié)
    發(fā)表于 01-04 15:10 ?0次下載

    淺談ARM寄存器組織

    是32位的,但目前只使用了其中的12位。除了這6個(gè)狀態(tài)寄存器外,其余的31個(gè)寄存器又稱為通用寄存器ARM處理
    發(fā)表于 10-18 13:26 ?1次下載
    淺談<b class='flag-5'>ARM</b><b class='flag-5'>寄存器</b>組織

    數(shù)據(jù)傳送指令之程序狀態(tài)寄存器指令簡述

    分享到:標(biāo)簽:數(shù)據(jù)傳送指令 微處理 程序狀態(tài)寄存器指令 MRS ARM 5.6 程序狀態(tài)寄存器
    發(fā)表于 10-18 17:03 ?1次下載

    寄存器操作方法_對(duì)寄存器操作的通用方法總結(jié)

    本文主要詳解寄存器操作方法以及對(duì)寄存器操作的通用方法總結(jié),具體的跟隨小編來了解一下。
    的頭像 發(fā)表于 05-22 15:53 ?2.3w次閱讀

    ARM64ARM32 的Linux程序區(qū)別在哪里

    arm64ARM64。我在示例中使用了AArch64寄存器,但我所描述的許多問題也發(fā)生在ARMv8-A 32位執(zhí)行狀態(tài)。
    的頭像 發(fā)表于 08-09 09:51 ?2.7w次閱讀
    <b class='flag-5'>ARM64</b>與<b class='flag-5'>ARM</b>32 的Linux<b class='flag-5'>程序</b>區(qū)別在哪里

    零基礎(chǔ)學(xué)ARM程序狀態(tài)寄存器訪問指令解析

    一、程序狀態(tài)寄存器訪問指令ARM微處理支持程序狀態(tài)寄存器訪問指令,用于在
    的頭像 發(fā)表于 12-24 13:36 ?3569次閱讀

    AArch64寄存器介紹

    作為 RISC 架構(gòu),AArch64 提供了大量的通用寄存器。除通用寄存器之外,本節(jié)還會(huì)介紹特殊寄存器
    的頭像 發(fā)表于 08-24 09:57 ?6255次閱讀

    ARM通用寄存器及狀態(tài)寄存器詳解

    筆者來聊聊ARM通用寄存器以及狀態(tài)寄存器的認(rèn)識(shí)與理解。
    的頭像 發(fā)表于 01-06 14:58 ?7392次閱讀

    arm三個(gè)寄存器在gdb調(diào)試時(shí)的作用

    ARM寄存器(r0、r1和r2)的作用非常重要。 1. R0寄存器: R0寄存器ARM處理
    的頭像 發(fā)表于 01-31 10:44 ?1090次閱讀

    通用寄存器是什么意思

    在計(jì)算機(jī)體系結(jié)構(gòu)中,通用寄存器是中央處理(CPU)內(nèi)部最為核心和基礎(chǔ)的組成部分之一。它們被設(shè)計(jì)為能夠存儲(chǔ)和傳輸各種類型的數(shù)據(jù)和指令,是CPU進(jìn)行數(shù)據(jù)處理和運(yùn)算的關(guān)鍵工具。通用
    的頭像 發(fā)表于 09-05 14:13 ?1214次閱讀
    威尼斯人娱乐代理| 大发888官网注册送58| 东营区百家乐官网艺术团| 百家乐官网赌博出千| 大发888官方下载删除| 菲律宾百家乐娱乐场| 百家乐公式计算| 百家乐官网顶尖高手| 金盈会百家乐官网现金网| 皇冠代理网址| 大发888被查| 增城太阳城巧克力| 百家乐如何切牌好| 百家乐5式直缆投注法| 百家乐官网拍照看| 百家乐官网讲坛汉献| 最新博彩论坛| 棋牌游戏易发| 威尼斯人娱乐场门票| 百家乐庄闲符号记| 澳门百家乐娱乐城送体验金| 百家乐官网破解仪恒达| 新澳博百家乐官网现金网| 桐庐县| 888娱乐城| 云博娱乐城| 盐城棋牌游戏中心| 大发888游戏平台403| 百家乐德州扑克桌布| 百家乐娱乐平台网| 百家乐赢钱秘籍鹰| 百家乐赌场技巧网| 百家乐犯法| 澳门百家乐信誉| 百家乐一柱擎天| 真人百家乐官网作| 大集汇百家乐官网的玩法技巧和规则| 百家乐官网路子分| 机器百家乐官网作弊| 百家乐官网澳门赌| 百家乐官网游戏厅|