www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > 嵌入式大雜燴
[導讀]為什么會寫篇棧變化的文章?做系統(tǒng)分析的話你肯定遇到過一些crash,oops等棘手問題,一般大家都會用gdb,objdump或者addr2line等工具分析pc位置來定位出錯的地方。但是這些分析工具背后的本質原理就不見得理解深刻了,而且有的時候面對一系列backtrace或者st...

為什么會寫篇棧變化的文章?做系統(tǒng)分析的話你肯定遇到過一些crash, oops等棘手問題,一般大家都會用 gdb, objdump 或者 addr2line等工具分析 pc 位置來定位出錯的地方。但是這些分析工具背后的本質原理就不見得理解深刻了,而且有的時候面對一系列 backtrace 或者 stack 日志處于懵逼的狀態(tài)。


今天和大家一起看下面對 crash 日志的時候,如何利用 stack 來分析其變化的來龍去脈。


Arm指令集介紹

崇尚簡單粗暴的介紹方式,我們直接來看各個寄存器的大體用法,詳細用法可百度,不,谷歌。
1. ?? r0-r3 用作傳入函數(shù)參數(shù),傳出函數(shù)返回值。在子程序調用之間,可以將 r0-r3 用于任何用途。被調用函數(shù)在返回之前不必恢復 r0-r3。---如果調用函數(shù)需要再次使用 r0-r3 的內容,則它必須保留這些內容。2. ?? r4-r11 被用來存放函數(shù)的局部變量。如果被調用函數(shù)使用了這些寄存器,它在返回之前必須恢復這些寄存器的值。r11 是棧幀指針?fp。3.????r12 是內部調用暫時寄存器?ip。它在過程鏈接膠合代碼(例如,交互操作膠合代碼)中用于此角色。在過程調用之間,可以將它用于任何用途。被調用函數(shù)在返回之前不必恢復 r12。4.????寄存器 r13 是棧指針?sp。它不能用于任何其它用途。sp 中存放的值在退出被調用函數(shù)時必須與進入時的值相同。5.????寄存器 r14 是鏈接寄存器?lr。如果您保存了返回地址,則可以在調用之間將 r14 用于其它用途,程序返回時要恢復6.????寄存器 r15 是程序計數(shù)器?pc。它不能用于任何其它用途。

演示代碼

假如現(xiàn)在你已經掌握了 arm 指令的用法,即便沒有掌握也沒關系,“書到用時回頭翻”。這里以一段簡單的 c 語言為例:
#include
int m = 8;int fun(int a,int b){ int c = 0; c = a b; return c;}int main(){ int i = 4; int j = 5; m = fun(i, j); return 0;}編譯一下,然后反匯編:

$ arm-linux-gnueabi-gcc main.c -o main?$ arm-linux-gnueabi-objdump -D -D main
00010400 : 10400: e52db004 push {fp} ; (str fp, [sp, #-4]!) 10404: e28db000 add fp, sp, #0 10408: e24dd014 sub sp, sp, #20 1040c: e50b0010 str r0, [fp, #-16] 10410: e50b1014 str r1, [fp, #-20] ; 0xffffffec 10414: e3a03000 mov r3, #0 10418: e50b3008 str r3, [fp, #-8] 1041c: e51b2010 ldr r2, [fp, #-16] 10420: e51b3014 ldr r3, [fp, #-20] ; 0xffffffec 10424: e0823003 add r3, r2, r3 10428: e50b3008 str r3, [fp, #-8] 1042c: e51b3008 ldr r3, [fp, #-8] 10430: e1a00003 mov r0, r3 10434: e24bd000 sub sp, fp, #0 10438: e49db004 pop {fp} ; (ldr fp, [sp], #4) 1043c: e12fff1e bx lr
00010440
: 10440: e92d4800 push {fp, lr} 10444: e28db004 add fp, sp, #4 10448: e24dd008 sub sp, sp, #8 1044c: e3a03004 mov r3, #4 10450: e50b300c str r3, [fp, #-12] 10454: e3a03005 mov r3, #5 10458: e50b3008 str r3, [fp, #-8] 1045c: e51b1008 ldr r1, [fp, #-8] 10460: e51b000c ldr r0, [fp, #-12] 10464: ebffffe5 bl 10400 10468: e1a02000 mov r2, r0 1046c: e59f3010 ldr r3, [pc, #16] ; 10484
10470: e5832000 str r2, [r3] 10474: e3a03000 mov r3, #0 10478: e1a00003 mov r0, r3 1047c: e24bd004 sub sp, fp, #4 10480: e8bd8800 pop {fp, pc} 10484: 00021024 andeq r1, r2, r4, lsr #32

圖解棧的變化過程

如何能讓讀者接受吸收的更快,我一直覺得按照學習效率來講的話順序應該是視頻,圖文,文字。反正我是比較喜歡視頻類的教學。這里給大家畫下棧變化的過程是什么樣子的。這里的圖是結合上面的代碼來畫的,希望有助于讀者的理解。

1.程序在內存分布區(qū)域



2.全局變量m賦值



3.保存進入main之前的棧底, fp-sp之間是當前函數(shù)棧




4.函數(shù)main的棧已經準備好了



5.i入棧



6.j入棧




7.準備函數(shù)fun的調用, 形參反向入棧 先形參b入棧



8.形參a入棧



9.留空一個地址作為fun返回值, 待后面返回時填入



10.fun返回地址入棧, 通常是main函數(shù)當前pc指針的下一個



11.main函數(shù)的棧底地址入棧



12.pc指針跳轉fun代碼



13.c入棧



14.可以看到函數(shù)fun的數(shù)據 形參a,b 在上一層函數(shù)的棧中. 一部分在自己的棧上. 此步取值到加法器中進行加法運算,再賦值給c



15.c賦給返回值,填入上面的留空位置



16.棧底恢復上一層



17.lr賦值給pc, 實現(xiàn)了跳轉



18.返回值賦值給全局變量m



19.前面函數(shù)調用的形參已經無用,回滾sp



20.函數(shù)返回,清理main的棧空間



總結

這么多圖有沒有看花?相信到這里你已經了解了棧背后的來龍去脈,下一篇我們一起根據實際的 stack 錯誤案例剖析錯誤的可能性。

往期推薦:

物聯(lián)網通信協(xié)議大匯總!

極客感十足的電子胸牌 ART-Badge V2.0

在公眾號聊天界面回復1024,可獲取嵌入式資源;回復?m?,可查看文章匯總。


點擊閱讀原文,查看更多分享

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉